【发布时间】:2011-11-23 18:57:19
【问题描述】:
我经常编写将成员变量复制到本地堆栈变量的代码,我相信这样可以通过删除访问成员变量时必须发生的指针取消引用来提高性能。
这有效吗?
例如
public class Manager {
private readonly Constraint[] mConstraints;
public void DoSomethingPossiblyFaster()
{
var constraints = mConstraints;
for (var i = 0; i < constraints.Length; i++)
{
var constraint = constraints[i];
// Do something with it
}
}
public void DoSomethingPossiblySlower()
{
for (var i = 0; i < mConstraints.Length; i++)
{
var constraint = mConstraints[i];
// Do something with it
}
}
}
我的想法是 DoSomethingPossiblyFaster 实际上比 DoSomethingPossiblySlower 更快。
我知道这几乎是一个微优化,但有一个明确的答案会很有用。
编辑 只是为此添加一点背景。我们的应用程序必须处理来自电信网络的大量数据,对于我们的某些服务器,这种方法每天可能会被调用约 10 亿次。我的观点是,每一点小事都有帮助,有时我想做的只是给编译器一些提示。
【问题讨论】:
-
你分析过它吗?
-
也许你通过这样做获得的时间是“丢失”的,因为它需要时间将指针复制到另一个内存位置(我们正在谈论微优化,所以我认为它们是合理的事情考虑)。
-
@mike,即使他已经对其进行了分析,解释为什么仍然是一个有用的工件。
-
我对分析这个并不感兴趣。我试图了解这种微优化是否应该起作用。我实际上认为乔恩的答案是正确的 - 更具可读性。而且我同意微优化不是更具可读性。
-
这不是微优化;这是一个纳米优化。您几乎肯定会遇到比这个问题大 数千 或 数百万 倍的问题。你有一个满是黑莓荆棘的院子,你正试图通过用镊子调整单个草叶来改善草坪的外观。而是花时间清理荆棘。
标签: c# performance