【发布时间】:2016-01-13 20:07:19
【问题描述】:
我有一个需要不断将二进制文件写入文件的应用程序。数据位很小,每个大约 1K。运行它的计算机不是很好,并且运行的是 XP。我遇到的问题是,当我打开日志记录时,计算机完全被淹没了,我看着任务管理器,只看到内存使用量不断上升,直到它崩溃。
一位同事建议我将数据包保存在内存中,直到经过一定时间,然后一次全部写入,而不是单独写入每个数据包 - 尝试过,同样的问题。
这是代码(loggingBuffer 是 List<byte[]> 我在间隔过去时存储数据包):
if ((DateTime.Now - lastStoreTime).TotalSeconds > 10)
{
string fileName = @"C:\Storage\file";
FileMode fm = File.Exists(fileName) ? FileMode.Append : FileMode.Create;
using (BinaryWriter w = new BinaryWriter(File.Open(fileName, fm), Encoding.ASCII))
{
foreach (byte[] packetData in loggingBuffer)
{
w.Write(packetData);
}
}
loggingBuffer.Clear();
lastStoreTime= DateTime.Now;
}
我应该做些什么不同的事情来完成这个?
【问题讨论】:
-
在 File.Open 周围使用外部“使用”并明确关闭打开的文件,例如using(FileStream fs = File.Open(etc.etc.)) { using (BinaryWriter w = new BinaryWriter(fs)) {
-
w.Write(packetData);在此行之后尝试放置w.Flush();并查找File.WriteAllBytes(string path, byte[] bytes)方法
标签: c# .net logging optimization binarywriter