哪个更好?它甚至重要吗?

时间:2012-05-14 21:26:27

标签: c# optimization

这可能是一个愚蠢的问题,但是我想在我的ASP .NET应用程序中从OnSelectedIndexChanged事件中获取两个值。
哪个更好?

var personId = Convert.ToInt32(((GridView)sender).SelectedDataKey.Values["PersonId"]);
var name = ((GridView)sender).SelectedDataKey.Values["Name"].ToString();

OR

var gView = (GridView)sender;
var personId = Convert.ToInt32(gView.SelectedDataKey.Values["PersonId"]);
var name = gView.SelectedDataKey.Values["Name"].ToString();

对于速度来说,两次投射GridView会产生多大的影响?如果我提取更多价值怎么办?还有其他的

6 个答案:

答案 0 :(得分:5)

后者(施放一次)会稍快一些。我也更喜欢它的可读性。性能差异是如此之小,以至于在这种情况下真正考虑它很可能是毫无意义的微优化。

答案 1 :(得分:3)

编译器会为您优化。为了便于阅读,我更喜欢第二种。

答案 2 :(得分:2)

不铸造更好。从理论上讲,它在实践中更快,无关紧要。但是,您投射一次会产生更清晰的代码。

答案 3 :(得分:1)

我会选择不投出比我需要的更多。在这种情况下,性能无关紧要,但更容易理解。

答案 4 :(得分:1)

由于一次投射和可读性,我会选择稍微改进的第二种选择

var key = ((GridView)sender).SelectedDataKey;
var personId = Convert.ToInt32(key.Values["PersonId"]);
var name = key.Values["Name"].ToString();

此代码更好地显示了意图 - 您在这里使用DataKey,而不是使用整个GridView,因此您不需要继续引用GridView对象。

答案 5 :(得分:0)

施法两次比施法一次花费更多 有一个选项,编译器将在两种情况下输出相同的.dll,这意味着它已经为您优化了 - 更加确定 - 用第一个选项进行编译并保存您获得的.DLL,然后使用第二个选择进行编译。
比较两个.DLL的大小 - 如果它是相同的 - 编译器已经为你优化了它,否则选择第二个选择,因为它更具可读性和更优化。