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