条件对性能有多大影响?

时间:2013-10-25 14:48:44

标签: c# conditional-statements performance

条件限制会影响表现多少?例如,代码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旗帜,有些则不关心。有没有人有这样或那样的统计证据?

2 个答案:

答案 0 :(得分:1)

我同意其他响应者;但是,我想补充一点。

如果经常运行给定的方法,则需要考虑if语句引起的性能损失。如果您想了解有关此效果的详细信息,建议您阅读有关conditional branching.

的帖子

话虽如此,我会说通过改变第一行代码来获得非常微不足道的性能提升

bool isBusiness = string.IsNullOrEmpty(data["businessName") ? false : true;

到此:

bool isBusiness = !string.IsNullOrEmpty(data["businessName");

尽管如此,我更喜欢第一个选项

原因在于,如果您想提高代码清晰度,可以从中重构:

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"]; 
}

到此:

bool isBusiness = !string.IsNullOrEmpty(data["businessName");
if(isBusiness) {
   this.MapBusinessRow(data);
}
else {
   this.MapCustomerRow(data)
}

但是,我必须说,这纯粹是为了提高可读性而不是为了表现。

在一天结束时,如果你担心它;测试它!

答案 1 :(得分:0)

我认为这个问题没有明确的答案。这取决于行数等,唯一可以回答它的是你。要测试它,您只需使用Stopwatch类。

我认为不会有太多差异,所以我会说A,因为它更具可读性/可编辑性。