关于在c#中使用内存流的性能问题

时间:2010-10-05 07:51:46

标签: c# memorystream

我创建了一个项目。很多人会一次使用我的项目。 如果任何人遇到错误,那么它将通过使用内存流创建对象来写入文件。 如果每个人都得到错误,那么将创建该数量的对象,并且所有对象一次将错误写入同一文件。 这有什么问题和性能问题吗?

4 个答案:

答案 0 :(得分:6)

  1. 使用内存流写入文件似乎是不必要的。打开/创建文件并直接写入文件。更好的是:使用库来记录,例如log4net,它将负责同时访问日志文件。记录是一项标准任务,无需重新发明轮子。
  2. 如果您担心性能,请执行加载测试,看看是否出现了问题。

答案 1 :(得分:1)

内存流只是字节数组周围的Stream接口。

所以这实际上非常快。

但是整个字节数组都保存在内存中,因此您可能遇到的性能问题是由于内存分配太多。

如果你真的遇到问题取决于“很多人”有多大,以及内存流中的数据量。

如果您使用“很多人”写入同一文件,也要注意锁定问题。

答案 2 :(得分:1)

想到文件锁定/争用。你能不创建一个日志目录并让所有日志写入创建自己的文件?或者,使用.NET跟踪功能,或者像log4net,Common.Logging,dotTrace作为日志框架来为您删除这些问题。

答案 3 :(得分:0)

在访问日志文件时,使流共享并在其周围使用锁定。记得在退出时关闭流。

static Object _locker = new Object;
static FileStream fs = new FileStream(...);

// your code
lock(_locker)
{
   fs.Write(...) // write to stream
}