【发布时间】:2012-05-21 16:08:32
【问题描述】:
我正在创建一个用于性能测试的库。在其中我生成一个Dictionary<Type, X> 一次。这些项目当前以随机顺序插入。字典在应用程序生命周期内保持不变。
然后它经常用于查找项目。查找是库中较大的瓶颈之一。
是的,我正在进行微优化,但要学习。我想知道是否有更好的方法来获得查找性能?
更新
我使用 dotTrace 来衡量性能。报告 + dotTrace 在我家的电脑里,所以我这里没有报告(本来可以在其他地方上传的)。
我使用了这里找到的测试: https://github.com/danielpalme/IocPerformance
字典定义见这里:https://github.com/jgauffin/Griffin.Container/blob/master/Source/Griffin.Container/ContainerBase.cs
(我上周五创建了容器,不要期望太多)
更新2
Dictionary.TryGetValue 总共占用了 Resolve 的 101 毫秒(总共 251 毫秒),如果我正确解释了数字,则为 40.2%。
【问题讨论】:
-
a:数据中有多少类型/对,b:是什么让您认为它是瓶颈? (即你是如何测量的?我们可以看到任何查找代码吗?)
-
和 c: 调用者是使用静态类型(即
int等),还是由于反射而使用Type对象?如果调用者静态知道类型,则可以使用一些技巧 -
@MarcGravell :您能否对这些技巧(答案或链接)进行一些扩展,因为它是一个有趣的主题。谢谢
-
@mathieu 特别是,我在想一个通用的静态类型,即
SomeCache<int>.Whatever(...),带有一个静态初始化器 (.cctor) 来准备每个T的元数据。 -
@MarcGravell:阅读我的更新。
标签: c# performance dictionary inversion-of-control