【发布时间】:2013-11-04 18:14:26
【问题描述】:
条件对性能有多大影响?例如,代码 A 是否会比代码 B 执行得更快,因为它只检查布尔值一次? (data 在本例中是 DataTable)
代码 A:
bool isBusiness = string.IsNullOrEmpty(data["businessName") ? false : true;
if(isBusiness) {
var name = data["businessName"];
var id = data["businessId"];
var phone = data["businessPhone"];
var address = data["businessAddress"];
}
else {
var name = data["customerName"];
var id = data["customerId"];
var phone = data["customerPhone"];
var address = data["customerAddress"];
}
代码 B:
bool isBusiness = string.IsNullOrEmpty(data["businessName") ? false : true;
var name = isBusiness ? data["businessName"] : data["customerName"];
var id = isBusiness ? data["businessId"] : data["customerId"];
var phone = isBusiness ? data["businessPhone"] : data["customerPhone"];
var address = isBusiness ? data["businessAddress"] : data["customerAddress"];
这是一个小例子,所以实际差异会很小,但如果我像这样映射数百行怎么办?有些人关心isBusiness 标志,有些人不关心。有人有任何统计证据吗?
【问题讨论】:
-
检查需要一个cpu周期,所以几百行没什么
-
为什么要问?测量它。除此之外,我希望通过字符串访问索引器是代码中最慢的事情。如果你想优化你的代码,看看你的数据类是如何做到的。
-
如果你在这里遇到性能问题,那肯定不是
if语句引起的。这可能是由可怕的、基于魔术字符串的、无类型的 DataTable 内容引起的,其中所有内容都是object并且需要在运行时进行强制转换/装箱/拆箱。创建适当的数据模型或改用 ORM。 -
如果你想知道你的马跑得有多快,你是在网上问陌生人还是给你的马计时?
-
@HighCore 我没有任何性能问题,这只是一个想法。不幸的是,我需要使用“可怕的、基于魔法字符串的、无类型的数据表的东西”,因为我正在映射分布在 10 个映射类中的 1000 多个字段。由于要求,我需要使用 DataTable。
标签: c# conditional-statements performance