我正在编写一个性能非常关键的应用程序。我有点困惑的是哪个是x64 CPU最有效的数据类型。
MDSN说"In some cases, the common language runtime can pack your Short variables closely together and save memory consumption."而且"The Integer data type provides optimal performance on a 32-bit processor"
我使用大量数据(锯齿状数组中平均大约500万个值[10或更多] [30] [128,128])来实时生成位图(数据值的热图) 。所有数据点都是200到3500之间的整数,所以我可以使用short或integer。哪个最有效?
感谢。
答案 0 :(得分:1)
Int32
类型对于常规变量(例如32位和64位应用程序中的循环计数器)最有效。
处理大型数据时,读取/写入单个值的效率无关紧要,重要的是访问数据,以便尽可能减少内存缓存未命中。与访问高速缓存的内存相比,内存高速缓存未命中非常昂贵。 (此外,与内存缓存未命中相比,页面错误(内存交换到磁盘)非常昂贵。)
为了避免缓存未命中,您可以尽可能紧凑地存储数据,并且在处理数据时,您可以尽可能线性地访问数据,以便您访问的内存区域尽可能小。
对于任何足以跨越多个缓存块的数组,使用Int16
最有可能比Int32
更有效,而缓存块通常只有几千字节。
由于您的值可以仅以12位存储,因此将每个值存储在1.5个字节中甚至可能更有效,尽管这意味着处理数据的处理更多。减少25%的数据大小可能会弥补额外的处理。
答案 1 :(得分:0)
作为一般规则,变量使用的内存越少,处理的速度就越快,并且您将拥有更好的内存管理,因为您的应用程序将使用更少的内存。
Short只需要一半的内存整数需求,如果你只需要一个16位的数字并且你确定它永远不会更大,那么使用Short。