2013-03-09 156 views
4

我一直在閱讀關於以.Net Framework 4.0開始的新MemoryCache類的所有地方。從我讀過的內容來看,您可以通過不同的.Net應用程序訪問MemoryCache。我試圖在Asp.Net應用程序和標準的Windows窗體.Net應用程序之間共享一個對象。如果我將該對象添加到.Net應用程序中的MemoryCache中,則Asp.Net應用程序不會看到它。有什麼辦法可以做到這一點?謝謝你的時間,這是不勝感激。ASP.NET MemoryCache在應用程序間共享

Windows窗體應用程序:

Dim cache As ObjectCache = MemoryCache.Default 
    Dim policy As New CacheItemPolicy() 
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60) 
    cache.Set("testcache", TestObj, policy) 

Asp.Net應用:

Dim cache As ObjectCache = MemoryCache.Default 
    If IsNothing(cache("testcache")) Then Response.Write("TestCache Is Nothing") 

謝謝 - 瑞安

回答

1

MySQL內存表工作得很好,並具有出色的性能。 20/30插入第二個CPU,僅佔CPU的1%左右。

5

不,那是不可能的。 MemoryCache不是分佈式緩存解決方案。所以它只能在本地使用。

如果您正在尋找分佈式緩存備選方案,您可能需要查看AppFabricRedis

但是,它聽起來有點像奇怪的架構,想要以這種方式共享緩存。 也許暴露一個共享服務層,asp.net和winforms都消耗,並且只有服務實現緩存似乎更合乎邏輯(考慮到我對你正試圖解決的問題一無所知,所以我可以是錯的)。

緩存更常用於性能方面的原因,而不是在應用程序之間共享數據的方式。

+0

謝謝帕布羅。你認爲哪一個程序對新手程序員來說會更容易?你的時間值得讚賞。 – wayofthefuture 2013-03-09 20:03:09

+0

基本上,我正在用windows窗體應用程序讀取udp數據。 asp.net Web應用程序使用這個udp數據。這些數據每分鐘大約有100封郵件。爲了避免asp.net web應用程序的用戶通過odbc連接拉動數據的延遲,我希望共享內存將使asp.net應用程序響應更快,因爲應用程序必須一次拉大量數據庫。謝謝! – wayofthefuture 2013-03-09 20:10:07

+0

哦,我明白了。那麼不,你不能像這樣在不同的機器之間共享內存。最終,實際的數據需要從Winforms應用程序傳輸到服務器。你可以做的一件事就是在asp.net應用程序上創建一個WCF服務。 winforms應用程序每分鐘調用一次該服務,使用這100個消息,並且在服務中,您可以選擇將它們添加到本地緩存中,將它們存儲在數據庫中,或者兩者兼而有之。 – 2013-03-11 14:02:18

0

我意識到這個建議並不及時,但對於其他人閱讀這個問題,另一種可能性是兩個程序之間的進程間通信(IPC)。這樣兩個程序可以直接交換消息/數據,而不需要通過中間件。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

從上面的文檔,這裏有一些選擇。

剪貼板 COM 數據複製 DDE 文件映射 郵筒 管道 RPC 的Windows Sockets

在你的情況,映射內存文件可能是最好的方法,因爲它允許應用程序之間共享內存空間。從根本上說,你的MySql/Redis方法可能沒有那麼不同。

相關問題