内存映射文件.NET
我有一个项目,它需要访问ASP.NET中的大量专有数据。 这是通过在共享内存中加载数据在Linux / PHP上完成的。 我想知道是否尝试使用内存映射文件是可行的方法,或者是否有更好的方法可以提供更好的.NET支持。 我在考虑使用数据缓存,但不确定缓存中保存的数据大小的所有缺陷。
我知道这有点晚了,但.NET 4.0框架现在支持开箱即用的内存映射文件:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx
如果您正在为C#寻找内存映射库,请查看Tomas Restrepo的文件映射包装器。 它是根据LGPL许可的。
内存映射文件可以在拥有大量数据时使用,并且不希望产生跨进程边界编组的成本。 我把它用于类似的目的。 您需要对.NET中的不安全和固定内存概念感到相当舒服,才能利用MMF。 显然 ,Enterprise Library的缓存块包含包装底层C#API的代码。 我在别处看到过至少一个其他实现。
如果您可以忍受编组成本,那么使用某种.NET远程处理解决方案可能更容易也更优雅。
您可能只想将其放入Cache []对象中。 您可以根据实际文件设置缓存过期。 然后,无论何时修改实际文件,缓存中的对象的内容都将为null,您可以重新加载它。 如果您处理大量字节,这可能不合适。
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个缓存空间的状态。