我有一个项目,它需要访问 ASP.NET 中的大量专有数据。这是在 Linux/PHP 上通过将数据加载到共享内存中来完成的。我想知道是否尝试使用内存映射文件是可行的方法,或者是否有更好的方法来提供更好的 .NET 支持。我正在考虑使用数据缓存,但不确定保存在缓存中的数据大小的所有缺陷。
4 回答
我知道这有点晚了,但是 .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。 显然,企业库的缓存块包含包装底层 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 GB 的缓存空间,这些空间必须在您的应用程序和缓存之间共享。