繁体   English   中英

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

[英]Regarding performance issues for usage of memory stream in c#

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

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

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

因此,这实际上非常快。

但是整个字节数组都保留在内存中,所以可能由于内存分配过多而导致性能问题。

您是否真的会遇到问题取决于“多人”有多大,以及内存流中的数据量。

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

想到文件锁定/争用。 您不能创建日志目录,并让所有日志写入都创建自己的文件吗? 另外,也可以使用.NET跟踪功能或类似log4net,Common.Logging,dotTrace之类的日志记录框架来为您消除这些问题。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM