【发布时间】:2011-06-22 20:53:42
【问题描述】:
在我们的应用程序中,我们有一个非常大的字节数组,我们必须将这些字节转换为不同的类型。目前,我们为此使用BitConverter.ToXXXX()。我们的重头戏是ToInt16 和ToUInt64。
对于UInt64,我们的问题是数据流实际上有6个字节的数据来表示一个大整数。由于没有将 6 字节数据转换为 UInt64 的本机函数,我们这样做:
UInt64 value = BitConverter.ToUInt64() & 0x0000ffffffffffff;
我们对ToInt16的使用更简单,不需要做任何位操作。
我们做了很多这 2 项操作,因此我想询问 SO 社区是否有更快的方法来进行这些转换。目前,这两个函数消耗了我们整个 CPU 周期的大约 20%。
【问题讨论】:
-
整数性能不太可能是您的问题。处理大型阵列几乎总是使慢速 RAM 总线成为瓶颈。注意分析器输出中的“Last Level Cache Misses”性能计数器。
-
@Hans:你绝对正确:我们受内存限制。但为此,我不知道该怎么做。我们有一个大数组,我们必须遍历每个字节来提取数据。当我线性进入数组时,硬件预取器可能会锁定访问模式,除此之外,我不知道还能做什么。 --谢谢
标签: c# .net casting bitconverter