我有一个内存中的byte[]
,需要找到13
和10
所在的偏移量。然后我将使用以下内容来提取该行:
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.
答案 0 :(得分:1)
不确定它是否是“最快的方式”,但您可以查看Boyer-Moore算法以查找所需值的索引。
看一下这个SO帖子Search longest pattern in byte array in C#
Boyer-Moore比线性数组遍历更好,因为它可以根据你的'针'的长度跳过元素,随着'haystack'变大,它会变得更好。 HTH。
答案 1 :(得分:1)
由于您正在寻找一个双字节序列,因此您不必扫描每个字节,只扫描每个字节。如果目标索引包含13,则查看10的下一个字节。如果目标索引收起10,则查看前一个字节为13.这应该会使扫描时间比线性搜索大约减少一半。 / p>