代码之家  ›  专栏  ›  技术社区  ›  LJM Tim Schmelter

排序引用类型与值类型的性能

  •  0
  • LJM Tim Schmelter  · 技术社区  · 16 年前

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

    我的想法是局部变量比对象上的属性访问更快。我认为这在非托管代码的世界中是有意义的,在那里我可以真实地描述堆栈的工作方式以及值的引用方式。但是,我知道,托管代码的世界在封面下可能更复杂。我的问题是:非托管代码中内存管理和程序流的这些基本思想能普遍地投射到托管代码的世界中吗?

    最终,在Keeperofthesul的帮助下,我们能够跟踪到我们是如何模拟fileinfo对象的。因此,我在这个队列中添加了一个犀牛标签。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Chris Chilvers    16 年前

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

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

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

    推荐文章