2012-09-21 58 views
2

我有一個WCF服務(在NetTCP上的控制檯應用程序中實例化),此服務具有在負載上實例化的靜態數據(大量)。在多個進程之間共享靜態數據

我有一次運行此控制檯應用程序的多個實例,他們都在做相同的靜態數據初始化,有沒有一種方法,我可以有一個單一的數據源,並在進程之間共享數據,以便每個進程不需要消耗大量的內存?

回答

2

您可以使用內存映射文件;但由於Windows保護應用程序,每個進程都必須有自己的內存。

http://msdn.microsoft.com/en-us/library/dd997372.aspx

非持久化文件是不與磁盤上的文件關聯的內存映射文件。當最後一個進程完成對文件的處理時,數據將丟失並且垃圾回收文件將被回收。這些文件適合爲進程間通信(IPC)創建共享內存。

使用任何類型的「共享」數據,您都將擁有同步訪問的額外任務。

1

快速解決方案是編寫另一個首先運行的專用服務。它會加載數據一次,並根據需要將其提供給其他服務實例。

更強大的解決方案是將數據存儲在所有服務連接到的數據庫或緩存層中。緩存層是一個不錯的選擇,因爲如果服務不在緩存中(保留更多的當前設計)並且它可以很快(在內存中),您的服務可以延遲加載它。某些cache選項包括:

+0

同樣的問題,每道工序必須在它自己的內存中的 「緩存」。這真的只是引入了另一個在內存中具有相同內容的進程,這使得內存負載變得更糟,IMO –

相關問題