内存映射文件 .NET

15
我有一个项目需要在ASP.NET中访问大量的专有数据。在Linux/PHP上,通过将数据加载到共享内存中来完成此操作。我想知道是否尝试使用内存映射文件是可行的,还是有更好的.NET支持的更好方法。我考虑使用Data Cache,但不确定在Cache中保存数据大小的所有问题。
4个回答

31

1
注意事项:仅适用于 Windows 的 .NET Core 和 .NET 5+。 - Cole Tobin

12
如果你正在寻找一个用于C#的内存映射库,可以看一下Tomas Restrepo的filemap包装器。它的许可证是LGPL。

3
内存映射文件可用于处理大量数据,且不想承担跨进程边界的代价。我曾经为类似的目的使用过它。要充分利用MMF,您需要对.NET中的不安全和固定内存概念有一定的了解。据报道,企业库的缓存块包含了封装底层C# API的代码。我曾在其他地方看到过至少一个实现。
如果您可以接受跨进程边界的代价,使用某种.NET远程解决方案可能更容易、更优雅。

1

你可能想把它放在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个G的缓存空间,这必须在您的应用程序和缓存之间共享。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接