在64位计算机上扫描C#byte []两个字节并返回位置的最快方法是什么?

时间:2013-02-19 21:01:30

标签: c# bytearray micro-optimization

我有一个内存中的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.

2 个答案:

答案 0 :(得分:1)

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

看一下这个SO帖子Search longest pattern in byte array in C#

Boyer-Moore比线性数组遍历更好,因为它可以根据你的'针'的长度跳过元素,随着'haystack'变大,它会变得更好。 HTH。

答案 1 :(得分:1)

由于您正在寻找一个双字节序列,因此您不必扫描每个字节,只扫描每个字节。如果目标索引包含13,则查看10的下一个字节。如果目标索引收起10,则查看前一个字节为13.这应该会使扫描时间比线性搜索大约减少一半。 / p>