2013-06-20 115 views
1

我正在訓練基於單個數據庫的多個網絡。boost shared_memory_object存儲磁盤中的內容?

所以爲了加快速度並減少磁盤讀數,我使用了由boost提供的shared_memory_object類。由於實驗室工作站目前無法使用,因此我將代碼遷移到個人電腦。

在實驗室工作站上,主機程序成功將所有數據讀取到內存中。但在我的電腦上,奇怪的是它會在系統驅動器上創建一個文件,而不是將數據存儲在內存中。整個數據庫大約3.7 GB;該實驗室工作站具有32 GB內存並運行Windows Server 2008 R2;我的電腦有8 GB內存並運行Windows 7.

應該有足夠的內存來存儲數據。所以爲什麼?是否有某些方法可以強制程序將所有數據保存在內存中?

+0

還沒有回覆? –

回答

0

這是使用內存映射文件作爲共享內存的後盾,因此任何一臺計算機上的磁盤上都需要物理文件。操作系統仍然對該文件的內容進行廣泛的緩存,所以如果空間可用的話,它仍然可以實際上將其緩存在RAM中。

如果您不喜歡查看磁盤上物理上存在的文件名,那麼您可以嘗試使用 windows_shared_memory。它將使用從系統交換文件獲取的空間作爲共享內存的後盾。

+0

但爲什麼它在Win 7和Server 08之間表現不同?在服務器08上,沒有這樣的物理文件。 –

+0

我沒有在Win32上實際使用'shared_memory_object',所以我無法確認行爲上的差異。但是,如果您沒有在提供給shared_memory_object的文件名中指定絕對路徑,則有可能在Server 08上創建了一個文件,但它只位於意外的目錄中。你也可以使用SysInternals的Process Explorer來查看它是否可能在某個地方出現意外的打開文件句柄。 – bovine