2010-10-05 148 views
0

我创建了一个项目。许多人一次将使用我的项目。 如果有人遇到错误,那么它将通过使用内存流创建对象来写入文件。 如果每个人都有错误,那么将创建该数量的对象,并且所有对象一次都向同一文件写入错误。 这是否有任何问题和性能问题?关于在c#中使用内存流的性能问题

回答

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

+1:对于任何种类的(潜在)性能问题,*都不能替代(可重复)测试*。 – Richard 2010-10-05 08:32:32

+2

+1使用库进行日志记录 - 他们已经解决了这个问题,他们经过了充分的测试,并且他们在日志记录中找出了像并发这样的难题 – 2010-10-05 09:05:09

1

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

所以这实际上是非常快的。

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

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

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

1

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

0

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

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

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