0

私はC#で大きな文字列を扱っています。たとえば、私の文字列の長さは 2.000.000 文字です。この文字列を暗号化する必要があります。ハードディスクにテキストファイルとして保存する必要があります。最速かつ基本的なテキスト暗号化のために XOR を使用して暗号化しようとしましたが、それでも暗号化に時間がかかりすぎます。2.13 GHz duo CPU と 3 GB RAM で 1 時間かかります。また、ファイルの保存 (StreamWriter の Write メソッドを使用) とファイルからの読み取り (StreamReader の ReadToEnd メソッドを使用) に時間がかかりすぎます。

コード:

public static string XorText(string text) 
{   
   string newText = ""; 
   int key = 1; 
   int charValue; 
   for (int i = 0; i < text.Length; i++) 
   {
     charValue = Convert.ToInt32(text[i]); //get the ASCII value of the character 
     charValue ^= key; //xor the value 
     newText += char.ConvertFromUtf32(charValue); //convert back to string 
   } 
   return newText; 
}

これらの操作についてのアドバイスは何ですか?

4

1 に答える 1

4

StringBuilder大きな文字列には文字列の代わりに使用することをお勧めします。また、コードを表示して、他の最適化が可能かどうかを確認することをお勧めします。たとえば、ファイルの読み取り/書き込みには、バッファを使用できます。

更新:あなたのコードでわかるように、(このコードで)最大の問題は次の行にあります:

newText += char.ConvertFromUtf32(charValue);

String不変オブジェクトであり、演算子によって+=新しいインスタンスを作成するたびnewTextに、長さが大きい場合、時間とメモリの問題が発生するため、このコード行stringを使用する代わりに、次のようになります。StringBuilder

newText.Append(char.ConvertFromUtf32(charValue));

この関数は非常に高速に実行されます。

于 2012-05-17T09:17:43.687 に答える