Относительно проблем производительности для использования потока памяти в c # - PullRequest
0 голосов
/ 05 октября 2010

Я создал один проект. Многие люди будут использовать мой проект одновременно. Если какой-либо человек получил ошибку, он запишет в файл, создав объект с использованием потока памяти. Если все получат ошибки, то будет создано это количество объектов, и все объекты будут записывать ошибки в один и тот же файл одновременно. Есть ли с этим проблемы и проблемы с производительностью?

Ответы [ 4 ]

6 голосов
/ 05 октября 2010
  1. Использование потока памяти для записи в файл кажется ненужным. Откройте / создайте файл и напишите непосредственно в файл. Еще лучше: Используйте библиотеку для регистрации , такую ​​как log4net, которая позаботится об одновременном доступе к файлу журнала. Регистрация - стандартная задача, и нет необходимости изобретать велосипед.
  2. Если вас беспокоит производительность, выполните нагрузочный тест и посмотрите, действительно ли является проблемой.
1 голос
/ 05 октября 2010

Блокировка / конфликт файлов приходит на ум.Не могли бы вы создать каталог журналов и сделать так, чтобы все записи журнала создавали свой собственный файл?В качестве альтернативы, используйте функцию трассировки .NET или что-то вроде log4net, Common.Logging, dotTrace в качестве каркаса ведения журнала, чтобы устранить эти проблемы для вас.

1 голос
/ 05 октября 2010

Поток памяти - это просто интерфейс Stream вокруг байтового массива.

Так что это на самом деле очень быстро.

Но весь байтовый массив хранится в памяти, поэтому проблемы с производительностью могут возникнуть из-за слишком большого выделения памяти.

Если у вас действительно будут проблемы, зависит от того, насколько велико «много человек», и от объема данных в потоке памяти.

Также обратите внимание на проблемы с блокировкой, если вы пишете в тот же файл со словом «много людей».

0 голосов
/ 05 октября 2010

Сделайте поток общим и используйте блокировку вокруг него при доступе к файлу журнала. Не забудьте закрыть поток при выходе.

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

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