1

像下面这样多次使用时(或不)缓存仅返回私有变量(或类似便宜的东西)的值的属性查找的原因是什么?

private sealed class Foo {

    public string MyString { get; set; )

}


private void MyMethod(Foo foo1)
{
    if (foo1.MyString != null)
    {
        DoSomething(foo1.MyString);

        if (foo1.MyString.Length != 0)
        {
            DoSomething2(foo1.MyString.Length);
        }
    }

}
4

2 回答 2

2

像下面这样多次使用时(或不)缓存仅返回私有变量(或类似便宜的东西)的值的属性查找的原因是什么?

通常,如果属性 getter 只是返回一个字段(如您的示例),则不需要缓存它。这些类型的属性访问通常会被 JIT 编译器内联,因此缓存对生成的运行时几乎没有影响。

于 2013-10-08T17:07:41.287 回答
2

即使你的 getter 做了一些合理的计算来返回结果,缓存结果仍然不太可能是值得的,因为在现代 CPU 中,内存不是 CPU 通常是瓶颈。

我见过一个好心的开发人员将字符串连接的结果缓存在私有成员变量中以“使他的代码运行得更快”但最终效果是减慢整个系统的速度,因为他只是从其他人那里窃取 RAM系统的组成部分。那些其他部分使用它来缓存来自磁盘或网络的数据,这要慢得多,因此他的性能提升(以微秒为单位)是以牺牲其他地方的性能为代价的,以毫秒为单位。

通常,在分析应用程序并了解瓶颈所在之前避免优化,并且不要仅针对 CPU 进行优化,分析时需要查看内存CPU。

于 2013-10-08T17:18:06.507 回答