(申し訳ありませんが、これは文字列の長さを判断する最も効率的な方法 != 0?への 2 番目の投稿ですが、人々の回答に返信する方法がわかりません。返信は「回答」として投稿されます)
理想的には、私が探しているのは、次のことを行うための最も効率的なアルゴリズムです (これは 1 億回以上呼び出されます)。私はC#4.0を使用しています
文字列 "ABCDE " を次の配列に変換します: string["A","B","C","D","E"]
私のアルゴリズムは次のとおりです。
public string[] SplitOnMultiSpaces(string text)
{
if (string.IsNullOrEmpty(text)) return new string[0];
var split = text.Split(' ');
int length = split.Length;
var data = new string[length];
int index = 0;
for (int i = 0; i<length; i++)
{
if (split[i].Length != 0)
{
data[index++] = split[i];
}
}
return data;
}
私の問題は、これを 100,000 個の文字列に対してプロファイリングすると、実行に 1.04 秒かかることです。
「if (split[i].Length != 0)」チェックをコメントアウトすると、わずか 0.2 秒しかかかりません。
文字列に対するこの (単純な) クエリが、TOTAL 実行時間の 80% を占めている理由を誰か教えてもらえますか? (特に、他の領域がより多くの CPU を使用することを期待していたので) 私が思いついた唯一のアイデアは、C# が文字列の長さを数えようとしているということです。 ?)。しかし、それは時間のオーバーヘッドには意味がありません。
split[i][0] が存在するかどうかを確認しようと考えましたが、例外に依存すると WAAAAAAY が遅くなります。
PS - 私のアルゴリズムは、多くの場合、返された配列が必要以上に大きくなるという点でも問題がありますが、オーバーヘッドはそれほど大きくないようです。