3

インメモリbyte[]があり、オフセットの場所13と位置を特定する必要があり10ます。次に、次を使用してその行を抽出します。

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

x64 ビット コンピューターで 2 バイトを検索する最速の方法は何ですか? ..そしてそれを文字列に変換しますか?

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

2 バイトのシーケンスを探しているので、すべてのバイトをスキャンする必要はなく、1 つおきにスキャンするだけです。ターゲット インデックスに 13 が含まれている場合は、次のバイトで 10 を調べます。ターゲット インデックスに 10 が含まれている場合は、前のバイトで 13 を調べます。これにより、スキャン時間が線形検索の約半分に短縮されます。

于 2013-02-19T23:04:03.983 に答える
1

それが「最速の方法」になるかどうかはわかりませんが、Boyer-Moore アルゴリズムを調べて、必要な値のインデックスを見つけることができます。

このSOスレッドを見てくださいC#のバイト配列で最長パターンを検索してください

Boyer-Mooreは、「針」の長さに応じて要素をスキップでき、「干し草の山」が大きくなるにつれて良くなるため、線形配列トラバーサルよりも優れています。HTH。

于 2013-02-19T21:46:52.160 に答える