处理此字符串的效率更高

时间:2012-07-11 14:57:08

标签: c# string performance

我创建了一个小程序,它读取文本文件并根据该文本文件创建输出。

文本文件的示例可以是:

f
a b c
d e

我的程序将做的是创建一个显示该行然后全部的新文本文件 每行中单词的组合/排列,如下所示:

f
a b c 
a c b
b a c
b c a
c b a
c a b
a b
a c
b a
b c
c a
c b
a
b
c
d e
e d
e
d

我目前有这个功能正常工作,但是,我决定创建一个辅助文本文件,输出相同的东西,除了每个条目的组合/排列前面的“〜”,以提高可读性。

目前,我有两个输出串,所以我们说:

string outputStringNormal = "";
string outputStringReadable = "";

然后在我的代码中,我基本上将文本添加到每个输出字符串:

outputStringNormal += someText;
outputStringReadable += " ~ " + someText;

我想知道如果我只有一个输出字符串会更有效率 并且我将[randomMarker]追加到每个组合/排列的开头,并且在之前 我输出新的文本文件,在普通文件中,我将用“”替换我的标记,然后在我的Readable中我将用“〜”替换它。

所以这样:

outputString += "[randomMarker]" + someText;

然后在输出之前:

CreateSomeFile(outputString.Replace("[randomMarker]", "");
CreateSomeFile(outputString.Replace("[randomMarker]", " ~ ");

4 个答案:

答案 0 :(得分:3)

您不应将整个文本文件存储在内存中;您应该在生成该行时将每行写入文件。在处理诸如此类的组合数据时,很容易获得非常大的值,因此应该避免在内存中存储大量不需要的信息。

您应生成一行的字符串,将该行写入非人类文件,然后将~追加到人类可读文件并附加相同的行。这样做你甚至不会进行任何字符串连接,替换或任何事情。您将只是不断地写入输出流。

答案 1 :(得分:1)

从评论中移植:

在这种情况下,您可以使用StringBuilder:而不是:

+=运营商;

String.Concat()方法;

String.Format()方法。

事实上,String.Format()方法在内部使用StringBuilder类,.AppendFormat()方法,但如果您不需要格式化它,那么.Append()可以是比AppendFormat()快一点。

另外,为什么要将它存储在变量而不是新文本文件(streamwriter.Write())中?

答案 2 :(得分:0)

outputStringNormal = string.Format({0} SomeText, outputStringNormal)让您的表现更出色 在C#中,string.Format是连接字符串的最有效方法。你不应该使用字符串+ = string。

答案 3 :(得分:0)

写入文件很可能是你的瓶颈。因此,请确保您进行缓冲输出并尽可能少地刷新输出。