3

我有一个内存byte[],需要找到偏移的位置1310位置。然后,我将使用以下内容提取该行:

 String oneLine = Encoding.ASCII.GetString(bytes, 0, max);

在 x64 位计算机上搜索两个字节的最快方法是什么?..并将其转换为字符串?

除了遍历每个字节,扫描13然后扫描之外,我还能做些什么10吗?

// Disclaimer: 
// This is just for my curiosity.  Perhaps I'll gain a better understanding of
// how .NET interfaces with RAM, the CPU instructions related to comparisons, etc.
//  
// I don't suspect a performance problem, but I do suspect a lack of understanding
// (on my part) on how C# does low-level operations.
4

2 回答 2

1

不确定它是否是“最快的方式”,但您可以查看 Boyer-Moore 算法来查找所需值的索引。

看看这个 SO 线程在 C# 中的字节数组中搜索最长模式

Boyer-Moore 会比线性数组遍历更好,因为它可以根据“针”的长度跳过元素,并且随着“干草堆”变大它会变得更好。HTH。

于 2013-02-19T21:46:52.160 回答
1

由于您正在寻找一个两个字节的序列,因此您不必扫描每个字节,只需每隔一个字节即可。如果目标索引包含 13,则查看下一个字节是否为 10。如果目标索引包含 10,则查看前一个字节是否为 13。与线性搜索相比,这应该将您的扫描时间减少大约一半。

于 2013-02-19T23:04:03.983 回答