Файлы с отображением памяти .NET

У меня есть проект, и ему нужен доступ к большому количеству закрытых данных в ASP.NET. Это было сделано в Linux / PHP путем загрузки данных в разделяемую память. Мне было интересно, будет ли попытка использовать файлы с отображением памяти, или есть лучший способ с лучшей поддержкой .NET. Я думал об использовании кэша данных, но не был уверен во всех подводных камнях, связанных с размером данных, сохраняемых в кэше.


person CSharpAtl    schedule 10.12.2008    source источник


Ответы (4)


Я знаю, что это немного поздно, но платформа .NET 4.0 теперь поддерживает файлы с отображением памяти из коробки:

http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx

person Titian Cernicova-Dragomir    schedule 27.04.2010

Если вы ищете библиотеку с отображением памяти для C #, взгляните на карту файлов Томаса Рестрепо обертка. Это под лицензией LGPL.

person Filip Frącz    schedule 10.12.2008

Файлы с отображением памяти можно использовать, когда у вас большой объем данных и вы не хотите нести затраты на их распределение через границы процесса. Я использовал его для той же цели. Чтобы воспользоваться преимуществами MMF, вам необходимо хорошо разбираться в концепциях небезопасной и закрепленной памяти в .NET. По-видимому, блок кеширования Enterprise Library содержит код, который обертывает базовый API C #. Я видел по крайней мере еще одну реализацию в другом месте.

Если вы можете смириться с затратами на маршалинг, вероятно, проще и элегантнее использовать какое-то решение для удаленного взаимодействия .NET.

person jlew    schedule 10.12.2008

Вы можете просто добавить его в объект Cache []. Вы можете установить срок действия кеша на основе реального файла. Затем всякий раз, когда вы изменяете фактический файл, содержимое объекта в кеше будет нулевым, и вы сможете его перезагрузить. Это может не подходить, если вы имеете дело с большим количеством байтов.

byte[] fileBytes = Cache["fileBytes"];
if (null == fileBytes) {
   // reload the file and add it to the cache.
   string fileLocation = Server.MapPath("path/to/file.txt");
   // Just a same of some bytes.
   fileBytes = new byte[10];
   Cache.Insert(fileLocation, fileBytes, new System.Web.Caching.CacheDependency(fileLocation));
}

Наверное, у меня нет конкретного ответа по поводу характеристик производительности кеша и больших объемов данных. http://www.alachisoft.com/ncache/asp-net-cache.html Указывает, что вы получаете от 2 до 3 гигабайт кеш-памяти, которые должны быть разделены между вашим приложением и кешем.

person Steven Behnke    schedule 10.12.2008