Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内存映射文件.NET_C#_.net_Asp.net_Memory Mapped Files - Fatal编程技术网

C# 内存映射文件.NET

C# 内存映射文件.NET,c#,.net,asp.net,memory-mapped-files,C#,.net,Asp.net,Memory Mapped Files,我有一个项目,它需要访问ASP.NET中的大量专有数据。这是在Linux/PHP上通过在共享内存中加载数据完成的。我想知道是否应该尝试使用内存映射文件,或者是否有更好的方法支持.NET。我曾考虑使用数据缓存,但不确定缓存中保存的数据大小是否存在所有缺陷。如果您正在寻找C#的内存映射库,请查看包装器。它是在LGPL下授权的。当您拥有大量数据并且不想承担跨进程边界封送数据的成本时,可以使用内存映射文件。我也用过类似的方法。您需要非常熟悉.NET中的不安全和固定内存概念,才能利用MMF,企业库的缓存块

我有一个项目,它需要访问ASP.NET中的大量专有数据。这是在Linux/PHP上通过在共享内存中加载数据完成的。我想知道是否应该尝试使用内存映射文件,或者是否有更好的方法支持.NET。我曾考虑使用数据缓存,但不确定缓存中保存的数据大小是否存在所有缺陷。

如果您正在寻找C#的内存映射库,请查看包装器。它是在LGPL下授权的。

当您拥有大量数据并且不想承担跨进程边界封送数据的成本时,可以使用内存映射文件。我也用过类似的方法。您需要非常熟悉.NET中的不安全和固定内存概念,才能利用MMF,企业库的缓存块包含封装底层C#API的代码。我在其他地方看到了至少一个其他实现


如果您能够承受封送处理的成本,那么使用某种.NET远程处理解决方案可能会更简单、更优雅。

您可能只想将其扔到缓存[]对象中。您可以根据实际文件设置缓存过期时间。然后,无论何时修改实际文件,缓存中对象的内容都将为空,您可以重新加载它。如果要处理大量字节,这可能不合适

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));
}

我想对于缓存和大量数据的性能特征,我没有一个明确的答案。声明您的应用程序和缓存之间必须共享2到3 Gig的缓存空间。

我知道这有点晚了,但是.NET 4.0 framework现在支持内存映射的现成文件: