我创建了一个小程序,它读取文本文件并根据该文本文件创建输出。
文本文件的示例可以是:
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]", " ~ ");
答案 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)
写入文件很可能是你的瓶颈。因此,请确保您进行缓冲输出并尽可能少地刷新输出。