[英]Find properties of an object that are dictionary whose keys are of certain type
[英]In C#, is a dictionary whose keys are of type Type slower than a dictionary whose keys are of type ulong?
我目前有以下内容:
ConcurrentDictionary<ulong, MyEventHandler> eventHandlers;
以及无限个类:
class MyClass1
{
public const ulong MyKey = 0;
...
}
class MyClass2
{
public const ulong MyKey = 1;
...
}
...等等...
我的字典是保存一个与类类型相对应的事件处理程序。 现在,我使用MyKey
成员作为字典的键,可以正常工作。
但是,当现在和将来开发其他类时,我不想让开发人员担心必须拥有密钥。
执行以下操作的速度要慢多少(如果有的话):
ConcurrentDictionary<Type, MyEventHandler> eventHandlers;
然后使用typeof
运算符将Type索引到我的字典中?
这样,我就不必担心钥匙。
我确实非常在意速度,因为即使字典可能不会有超过100个条目,也会调用typeof
并每秒对字典进行数千次访问。
类型由元数据令牌表示和标识,我猜这是32位整数。 typeof运算符在元数据表中进行查找,以找到由元数据令牌表示的Type。
我相信JIT编译器会很好地优化元数据表访问,因此,我认为您不应该注意到现实中的任何性能差异。 如果使用Type作为键甚至会证明速度稍快,我实际上不会感到惊讶。
因为使用Type作为键会使代码更易于维护,所以我建议您采用这种方法,除非您可以证明另一种方法显然更有效。
如果您的字典是单例/多例,则可以通过以下模式创建通用类型以加快索引编制速度:
static class MyHandler<T>
{
static public MyEventHandler Value;
}
代替
CurrentDictionary[typeof(Class1)]
你可以做
MyHandler<Class1>.Value
这取决于如何实现GetHashCode()
。 当.Net框架代码“查找”字典中的对象时,它将调用此方法来执行搜索。 显然,在任何使用基于类型的键的字典中,与仅检索long
或uLong
的值相比, GetHashCode()
的实现所花费的时间要长得多,该字典的性能将成比例地uLong
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.