c# - 在 C# 中,键为 Type 类型的字典是否比键为 ulong 类型的字典慢?

标签 c# data-structures dictionary

我目前有以下内容:

ConcurrentDictionary<ulong, MyEventHandler> eventHandlers;

以及不定数量的类:

class MyClass1
{
    public const ulong MyKey = 0;
    ... 
}

class MyClass2
{
    public const ulong MyKey = 1;
    ... 
}

...等等...

我的字典是保存与类的类型相对应的事件处理程序。现在我使用 MyKey 成员作为我的字典的键,效果很好。

但是,当现在和将来开发其他类时,我不想让开发人员担心必须拥有 key 。

执行以下操作要慢多少(如果有的话):

ConcurrentDictionary<Type, MyEventHandler> eventHandlers;

然后使用 typeof 运算符获取要索引到我的字典中的类型?

这样我就不用担心 key 了。

我确实非常关心速度,因为即使字典可能不会超过 100 个条目,也会调用 typeof 并且每秒会访问字典数千次。

最佳答案

类型由元数据标记表示和标识,我猜它是 32 位整数。 typeof 运算符在元数据表中进行查找,以查找元数据标记表示的类型。

我相信 JIT 编译器会很好地优化元数据表访问,因此我认为您实际上不应该注意到任何性能差异。如果使用 Type 作为键甚至会稍微快一点,我实际上不会感到惊讶。

由于使用 Type 作为键将使代码更容易维护,因此我建议使用该方法,除非您可以证明其他方法显然性能更高。

关于c# - 在 C# 中,键为 Type 类型的字典是否比键为 ulong 类型的字典慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700491/

相关文章:

mysql - 将 CSV 数据导入现有数据库

c# - 代码首先拒绝级联删除实体

c# - 我可以使用页面流式传输图像,而不是发送 ImageUrl 吗?

c - 关于二叉树的一些事情

dictionary - Golang 中未定义的 map 元素

python - 列出嵌套字典中的重复值

c# - MVC4 webapi 中的反序列化/模型绑定(bind)不适用于数组

c# - 通用查找函数作为参数

java - 将一系列列表转换为子列表并将它们存储在 linkedlist 类型的列表中

使用 qsort 对 C 数组进行排序?