2011-04-01 200 views
2

有谁知道在C#中使用共享内存预开源实现。 。.NET 4.0(在这里我们没有内存映射文件实现C#共享内存高速缓存

最好使用ID指标

+0

你对“id索引”有什么看法? – HABJAN 2011-04-01 17:39:49

+0

猜测“相同的内存地址/ ID指向相同的内存位置”。 – Mario 2011-04-01 17:41:03

+0

大多数我发现是基于对象的“字符串名称”,并且这看起来像一个低效的映射,并且我正在使用int当前的基于磁盘的缓存。 – Jens 2011-04-01 18:41:05

回答

2
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
public static extern IntPtr CreateFileMapping(
    IntPtr hFile, 
    IntPtr lpFileMappingAttributes, 
    FileMapProtection flProtect, 
    uint dwMaximumSizeHigh, 
    uint dwMaximumSizeLow, 
    [MarshalAs(UnmanagedType.LPTStr)] string lpName); 

在这里看到更多的信息

http://www.pinvoke.net/default.aspx/kernel32.createfilemapping

http://msdn.microsoft.com/en-us/library/aa366551(v=vs.85).aspx

C#的食谱包含SharedMemoryManager的实现,你可以查看这里: http://csharp.codefetch.com/example/p1/MutexFun/SharedMemoryManager.cs

+0

添加食谱参考 – sehe 2011-04-01 17:46:56

+0

是的,我有很多关于如何实现它的资源...但是这需要时间,我需要它来做一个更大的项目,所以我想尽可能地跳过这个圈。 但干杯反正:) – Jens 2011-04-01 18:41:54

2

企业库有一个缓存应用程序块在这里看到:Microsoft Enterprise Library 5.0 – April 2010最新的版本(.NET 3.5和.NET 4)。如果你有要求较低旧版本也有这个缓存应用程序块。

+0

我知道ETLIB中的高速缓存块,但对它的细节知之甚少......只是一个快速问题,如果您关心awnser,它是否能够在应用程序域和进程之间共享高速缓存(在同一台计算机上)这不是基于数据库或文件? (AKA Shared Memory Backing Store)... 因为现在饮料不多了,所以现在还没有时间去研究它,但是如果我必须......但欢呼提醒我它已经存在。 – Jens 2011-04-01 18:46:02

+0

@Jens - 我认为你可以这样做,并且缓存可以是,我引用“内存中或基于磁盘的文件或数据库”(来自http://msdn.microsoft.com/zh-cn/ -us/library/ee658105.aspx),并且还可以扩展它。 – 2011-04-02 07:42:06

1

你有几种选择。

我会选择内存映射文件,因为你会得到很多bette r演出。一切都取决于你想要达到的目标。看看.NET Framework 4.0。实施System.IO.MemoryMappedFile.

+0

我看了那个,以及...内存映射的文件是想法,如果我不得不执行我的自我...希望能解决这个问题... 4.0实现看起来有点像我在现实中需要的东西......所以“在.NET 3.5中重新实现它”是不需要的......但是明天你会看到你的链接,我想我已经被其中的一些人看到了。当我写信给另一个...我真的希望做一个快捷方式>。<。 – Jens 2011-04-01 18:47:53