コンソールアプリケーションで大きなタブ区切りのテキストファイルを読み取った後、テキストファイルを書き込もうとしています。問題は、サーバー上でこのexeの多くのインスタンスを同時に実行すると、TextWriter.WriteLineでランタイムエラーが発生し、未処理の例外が原因でアプリケーションがクラッシュすることです。これはすべてのインスタンスで発生します。この動作の理由がわかりません。メモリを動的に使用するStringBuilderを使用していないためですか?
私のコードは次のとおりです:
StreamReader sr = new StreamReader(@FilePath, System.Text.Encoding.Default);
string mainLine = sr.ReadLine();
string[] fileHeaders = mainLine.Split(new string[] { "\t" }, StringSplitOptions.None);
string newLine = "";
System.IO.StreamWriter outFileSw = new System.IO.StreamWriter(@outFile);
while (!sr.EndOfStream)
{
mainLine = sr.ReadLine();
string[] originalLine = mainLine.Split(new string[] { "\t" }, StringSplitOptions.None);
newLine = "";
for (int i = 0; i < fileHeaders.Length; i++)
{
if(fileHeaders[i].Trim() != "")
newLine = newLine + fileHeaders[i].Trim() + "=" + originalLine[i].Trim() + "&";
}
outFileSw.WriteLine(newLine.Remove(newLine.Length - 1));
FileInfo fileInfo = new FileInfo(@outFile);
if (fileInfo.Length > (1.3 * 1024.0 * 1024.0 * 1024.0)) // greater than 1.3 GB
{
outFileSw.Close();
outFileNumber = outFileNumber + 1;
outFileSw = new System.IO.StreamWriter(@outFile + outFileNumber.ToString() + ".txt");
}
}
outFileSw.Dispose();
sr.Close();
sr.Dispose();
エラーの詳細は次のとおりです。
Exception Message: The specified network name is no longer available.
Stack Trace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.Write(Byte[] array, Int32 offset, Int32 count)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count)
at System.IO.TextWriter.WriteLine(String value)
at ExampleExe.ExampleProcess.FnFiles()
Unhandled Exception: System.IO.IOException: The specified network name is no longer available.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer)
at System.IO.FileStream.Dispose(Boolean disposing)
at System.IO.FileStream.Finalize()
ありがとう、カヌ