财产查询的缓存

时间:2013-10-08 17:06:02

标签: .net

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

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);
        }
    }

}

2 个答案:

答案 0 :(得分:2)

  

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

通常,如果属性getter只是返回一个字段(就像你的例子一样),那么缓存就不必了。这些类型的属性访问通常会被JIT编译器内联,因此缓存对生成的运行时几乎没有影响。

答案 1 :(得分:2)

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

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

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