У меня есть проект и ему нужно получить доступ к большому количеству запатентованных данных в ASP.NET. Это было сделано на Linux/PHP, загрузив данные в общую память. Мне было интересно, будет ли попытка использовать файлы с памятью в MAP, или если есть лучший способ с лучшей поддержкой .NET. Я думал об использовании Data Cache, но не уверен в всех ошибках в отношении размера данных, сохраняемых в кэше.Файлы с отображением памяти .NET
ответ
Если вы ищете библиотеку с отображением памяти для C#, загляните в обложку Tomas Restrepo's filemap. Он лицензирован под LGPL.
Файлы с отображением памяти могут использоваться, когда у вас большой объем данных, и вы не хотите брать на себя затраты на его маршалинг через границы процесса. Я использовал его для аналогичной цели. Вы должны быть достаточно комфортно с небезопасными и закрепленными концепциями памяти в .NET, чтобы использовать MMF. Apparently, блок кэширования корпоративной библиотеки содержит код, который обертывает базовый C# API. Я видел, по крайней мере, еще одну реализацию в другом месте.
Если вы можете жить с затратами на маршалинг, возможно, проще и элегантнее использовать какое-то решение для удаленного доступа .NET.
Возможно, вы захотите просто выбросить его в объект 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 гигабайт пространства кеша, которые должны быть разделены между вашим приложением и кешем.
Я знаю, что это немного поздно, но рамки для .NET 4.0 теперь поддерживает отображаемые в памяти файлы из коробки:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx