【发布时间】:2011-05-14 12:05:41
【问题描述】:
我遇到了一些规则(建议)来使用具体的List 和Dictionary 而不是IList 和IDictionary,因为示例测试显示通过接口访问要慢很多。例如,将 10000 个值添加到列表中,然后在列表中执行 Count 10 亿次,这表明通过接口执行此操作比通过具体类执行此操作要慢 28 倍。即,通过具体类需要 80 毫秒,通过接口需要 2800 毫秒,这表明通过接口的速度有多慢。鉴于此,使用具体类是否合理。界面这么慢是有原因的吗? (可能更针对那些更了解 .net 内部结构的人)。
【问题讨论】:
-
很少会看到 100 倍的性能差异。我怀疑您的性能测量的正确性。你能告诉我们你的代码吗?
-
为什么要在代码中间强制进行 GC 收集?没有任何东西可以收集,也不能保证在那个时候运行它可能会破坏你的基准。
-
@user455095:GC.Collect() 可能会触发一些后台活动。
-
@Henk Holterman:
GC.Collect()触发后台活动:终结器线程。 -
这里的问题不是间接接口方法调用这么慢,而是Count属性非常非常快。您可以通过执行 10 亿次来使任何快的东西变慢。
标签: c# .net performance