使用大字符串

时间:2012-05-17 09:14:14

标签: c# string performance optimization

我正在使用C#中的大字符串。例如,我的字符串长度是2.000.000个字符。我必须加密这个字符串。我必须将其保存为硬盘上的文本文件。我尝试使用XOR进行加密,以实现最快和最基本的文本加密,但仍然需要太长时间的加密。 2.13 GHz双核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; 
}

您对这些操作有何建议?

1 个答案:

答案 0 :(得分:4)

我建议使用StringBuilder而不是字符串表示大字符串,最好还是显示代码以查看是否有其他优化可行。例如,从/向文件读/写可以使用缓冲区。

更新:正如我在您的代码中看到的最大问题(使用此代码)就在这一行:

newText += char.ConvertFromUtf32(charValue);

Stringimmutable对象,+=运算符每次都会创建newText的新实例,当长度很大时,会导致时间和内存问题,如果您使用string,则代替StringBuilder,这行代码将如下:

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

此功能运行速度极快。