C#性能:将值与字典/ vs /比较与数组

时间:2019-01-22 22:51:22

标签: arrays performance loops dictionary comparison

在我寻求以程序方式生成点时创建0垃圾时,我偶然发现了将值与存储在Dictionary中的另一个值进行比较时的性能问题。

最初,我使用列表和数组,但是最近我重新访问了该代码,以避免产生任何垃圾。另外,我决定使用字典而不是数组/列表,因为访问字典中的某个键似乎很有用。

我以以下方式使用字典:
-每个键都是我游戏中的一个网格物体
-每个值都是一个顶点或三角形的数组
-每个数组都包含数百个顶点或三角形

  Dictionary<int, Vector3[]> exampleVerticesDictionary;  
  Dictionary<int, int[]> exampleTrianglesDictionary;  

我的程序系统执行以下操作:

1. Takes an initial random value (int or float).  
2. Loops through all the items in the arrays of the 1st Dictionary.  
3. If the value matches any value on any of the arrays, continue on the next loop.*  
4. Loops through all the items in the arrays of the 2nd Dictionary.  
5. If the initial value matches again, continue on next loop.  
6. Loops through all the items in the arrays of the 3rd Dictionary.  
7. If the initial value matches again, create a 3D point.  

我通过以下方式访问和比较“字典”中的项目:

 if (exampleVerticesDictionary[key][index] == 1)

问题:它会导致明显的性能峰值。探查器表明这是由对这些方法的多次调用(成千上万)引起的:

  Dictionary.get_Item()
      GenericEqualityComparer.Equals()
          Int32.Equals()
      GenericEqualityComparer.Equals()
          Int32.GetHashCode() 

问题:

-为什么使用字典进行比较时性能会下降这么多?

-我只是更喜欢使用数组数组而不是字典词典?

-我应该使用其他方式访问和比较“词典”中的项目吗?


谢谢!编码不是我的强项,我对这个问题有点迷茫……

0 个答案:

没有答案