1

我创建了一个读取文本文件并基于该文本文件创建输出的小程序。

文本文件的一个示例可能是:

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

4 回答 4

3

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

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

于 2012-07-11T15:09:07.030 回答
1

从评论移植:

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

+=操作员;

String.Concat()方法;

String.Format()方法。

其实String.Format()方法内部使用的是StringBuilder类,.AppendFormat()方法,不过如果不需要格式化的话,可以.Append()AppendFormat().

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

于 2012-07-11T15:24:09.093 回答
0

outputStringNormal = string.Format({0} SomeText, outputStringNormal) 使用C# 中的 string.Format 可以提高性能,这是连接字符串的最有效方法。你不应该使用字符串 += 字符串。

于 2012-07-11T15:01:01.140 回答
0

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

于 2012-07-11T15:08:09.217 回答