Файлы, сопоставленные с памятью .NET

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

10.12.2008 19:02:51
4 ОТВЕТА

Если вы ищете библиотеку Memory Mapped для C #, взгляните на упаковщик файловых карт Tomas Restrepo . Он лицензирован в соответствии с LGPL.

10
9.07.2012 22:08:31

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

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

3
10.12.2008 19:13:11

Возможно, вы захотите просто добавить его в объект 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 гигабайт пространства кеша, которое должно быть разделено между вашим приложением и кешем.

1
10.12.2008 19:21:16

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

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

30
27.04.2010 11:29:42