Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典<;类型、对象>;vs字典<;RuntimeTypeHandle,对象>;什么';什么是更明智的性能? 什么是更明智的考虑?散列运行时类型句柄还是散列类型?请试着解释原因。_C#_C# 4.0_C# 3.0_C# 2.0 - Fatal编程技术网

C# 字典<;类型、对象>;vs字典<;RuntimeTypeHandle,对象>;什么';什么是更明智的性能? 什么是更明智的考虑?散列运行时类型句柄还是散列类型?请试着解释原因。

C# 字典<;类型、对象>;vs字典<;RuntimeTypeHandle,对象>;什么';什么是更明智的性能? 什么是更明智的考虑?散列运行时类型句柄还是散列类型?请试着解释原因。,c#,c#-4.0,c#-3.0,c#-2.0,C#,C# 4.0,C# 3.0,C# 2.0,对于任何“哪一个更快”的问题,唯一确定的答案是用不同的方法尝试相同的事情并比较结果。这可能意味着要做一百万次才能获得显著的差异,但其他任何事情都是学术性的 也就是说,字典性能的主要区别在于它们的键类型,特别是它们的哈希算法的性能和分布 查看的源代码,您可以看到它使用底层RuntimeType实例的哈希代码 private RuntimeType m_type; public override int GetHashCode() { return m_ty

对于任何“哪一个更快”的问题,唯一确定的答案是用不同的方法尝试相同的事情并比较结果。这可能意味着要做一百万次才能获得显著的差异,但其他任何事情都是学术性的

也就是说,字典性能的主要区别在于它们的键类型,特别是它们的哈希算法的性能和分布

查看的源代码,您可以看到它使用底层
RuntimeType
实例的哈希代码

    private RuntimeType m_type;

    public override int GetHashCode()
    {
        return m_type != null ? m_type.GetHashCode() : 0;
    }
现在
RuntimeType
没有覆盖
GetHashCode
,所以它很大程度上来自它的继承类型
TypeInfo
TypeInfo
也不会覆盖
GetHashCode
,因此它使用其继承的类型,即
type


因此,由于
RuntimeTypeHandle
GetHashCode
实现与
Type
相同,因此我不希望出现显著的性能差异。

您是否尝试过这两种方法并比较了它们?是什么让您认为会对性能产生重大影响?这是一个特定应用程序的瓶颈,还是您只是好奇?只是好奇,我不久前参加了C#课程,他告诉我们RuntimeTypeHandle对于散列的性能更为明智。我真的不知道如何检查它们,因为我需要很多类型,如果我散列10个类型,就不会做太多工作。好吧,你可以每种方式搜索一百万次键,看看是否有差异。字典访问是
O(1)
,因此字典的大小对性能没有太大影响(如果有的话)。散列算法的速度和分布决定了一切。好吧,我照你说的做了,显然散列类型比RuntimeTypeHandle更快。所以我做了另一个基准测试,因为
GetType
typeof
每次都返回相同的
Type
对象,所以我尝试通过
GetType().GetHashCode()
GetType()
来查找值。散列哈希代码(int32)似乎比使用类型本身快得多。谢谢,我做了一些基准测试,你可以看到我上面的评论。虽然有点不同,但似乎你是对的。散列
类型
运行时类型句柄
更快。