我创建了一个项目。很多人会同时使用我的项目。如果有人出错,那么它将通过使用内存流创建对象来写入文件。如果每个人都遇到错误,那么将创建该数量的对象,并且所有对象一次将错误写入同一个文件。这有什么问题和性能问题吗?
问问题
3277 次
4 回答
6
- 使用内存流写入文件似乎没有必要。打开/创建文件并直接写入文件。更好的是:使用诸如 log4net 之类的日志库,它将负责同时访问日志文件。记录是一项标准任务,无需重新发明轮子。
- 如果您担心性能,请进行负载测试,看看是否真的存在问题。
于 2010-10-05T07:56:14.967 回答
1
内存流只是字节数组周围的 Stream 接口。
所以这实际上非常快。
但是整个字节数组都保存在内存中,因此您可能遇到的性能问题是由于内存分配过多。
是否真的会有问题取决于“多少人”有多大,以及内存流中的数据量。
如果您使用“许多人”写入同一个文件,请注意锁定问题。
于 2010-10-05T07:56:45.100 回答
1
想到文件锁定/争用。您不能创建一个日志目录并让所有日志写入都创建自己的文件吗?或者,使用 .NET 跟踪功能或类似 log4net、Common.Logging、dotTrace 作为日志框架来为您消除这些问题。
于 2010-10-05T07:56:57.677 回答
0
在访问日志文件时使流共享并在其周围使用锁。记得在退出时关闭流。
static Object _locker = new Object;
static FileStream fs = new FileStream(...);
// your code
lock(_locker)
{
fs.Write(...) // write to stream
}
于 2010-10-05T09:02:16.543 回答