2011-04-01 242 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