私は次のように何かを始めました:
using (TextWriter textWriter = new StreamWriter(filePath, append))
{
foreach (MyClassA myClassA in myClassAs)
{
textWriter.WriteLine(myIO.GetCharArray(myClassA));
if (myClassA.MyClassBs != null)
myClassA.MyClassBs.ToList()
.ForEach(myClassB =>
textWriter.WriteLine(myIO.GetCharArray((myClassB)));
if (myClassA.MyClassCs != null)
myClassA.MyClassCs.ToList()
.ForEach(myClassC =>
textWriter.WriteLine(myIO.GetCharArray(myClassC)));
}
}
これはかなり遅いように見えました (35,000 行で約 35 秒)。
次に、こちらの例に従って、次のコードでバッファを作成しようとしましたが、何も得られませんでした。私はまだ35秒前後の時間を見ていた. バッファの実装方法に誤りがありますか?
using (TextWriter textWriter = new StreamWriter(filePath, append))
{
char[] newLineChars = Environment.NewLine.ToCharArray();
//Chunk through 10 lines at a time.
int bufferSize = 500 * (RECORD_SIZE + newLineChars.Count());
char[] buffer = new char[bufferSize];
int recordLineSize = RECORD_SIZE + newLineChars.Count();
int bufferIndex = 0;
foreach (MyClassA myClassA in myClassAs)
{
IEnumerable<IMyClass> myClasses =
new List<IMyClass> { myClassA }
.Union(myClassA.MyClassBs)
.Union(myClassA.MyClassCs);
foreach (IMyClass myClass in myClasses)
{
Array.Copy(myIO.GetCharArray(myClass).Concat(newLineChars).ToArray(),
0, buffer, bufferIndex, recordLineSize);
bufferIndex += recordLineSize;
if (bufferIndex >= bufferSize)
{
textWriter.Write(buffer);
bufferIndex = 0;
}
}
}
if (bufferIndex > 0)
textWriter.Write(buffer);
}
これを達成するためのより良い方法はありますか?