排序参考类型与值类型的性能

时间:2009-09-02 15:36:46

标签: .net rhino-mocks value-type reference-type

我们试图在.NET中对FileInfo对象的集合进行排序。我们实现了IComparer,以确保根据我们的标准对FileInfo对象进行排序。然后我们注意到,对FileInfo对象进行排序的性能比仅仅整数慢很多倍。在预感(并记住引用如何在C中工作)我们能够通过使用局部变量来限制我们引用FileInfo属性的次数来提高性能。

我的想法是局部变量的访问速度比对象的属性快。我认为这在非​​托管代码的世界中是有意义的,我可以在其中实际绘制堆栈如何工作以及如何引用值。但是,我知道托管代码的世界可能更复杂。我的问题是:这些基于非托管代码的内存管理和程序流的基本概念是否可以通常被投射到托管代码的世界中?

最终在KeeperOfTheSoul的帮助下,我们能够跟踪我们如何模拟FileInfo对象。出于这个原因,我在这个问题上添加了一个RhinoMock标签。

1 个答案:

答案 0 :(得分:1)

除了比较方法的实现之外,将值类型与引用类型进行排序之间不应该存在速度差异。如果我实现了一个使用sin的比较方法,那么int也会慢慢排序。

访问属性确实涉及方法调用,在访问局部变量时,值直接在堆栈上或已经在寄存器中。但是,JIT可以优化简单属性以提供类似于内联的内容。

在这种情况下,我认为问题是FileInfo可能需要读取文件系统来获取属性值,如果FileInfo没有在内部缓存该值,它可能会重复执行此读取。