回答
那麼,從.NET 3.5開始,就不支持共享內存。你必須使用P/Invoke,這很痛苦。更大的問題是C#的內存模型不利於與C++共享。
編輯
由於額外的風險,這將需要持有OS手柄,這意味着任何錯誤可能導致不會被任何東西短的查殺過程中固定泄漏。您可以通過使用SafeHandle
而不是IntPtr
來防止大部分此類情況。
每毫秒數千次不會說太多。如果它是一個字節的時間不是很多。如果更多..好,這一切都取決於多少。
我會建議不要共享內存。我會建議「不要通過共享來溝通,要通過溝通來分享」。如果一旦完成,分析表明額外的內存拷貝確實是瓶頸,那麼,也許一些基於互操作的共享內存解決方案就是解決方案。通常你會發現情況並非如此。
好建議。我想補充一點,實際上,共享內存通常用於實現IPC機制的IPC版本。例如,TCP/IP到「本地主機」使用共享內存,命名管道爲「。」。通過使用這些通用機制,您可以獲得共享內存的大部分速度,具有消息傳遞體系結構的穩健性以及可擴展性。 – 2010-07-26 18:31:50
到localhost的TCP/IP是否總是使用共享內存?這似乎與操作系統有關我很想知道哪些大三的桌面操作系統是這樣做的(Win/Mac/Lin)。 – 2010-07-26 20:54:13
每更新大約100個字節是速率。 使用pinvoke等需要線程安全功能,如鎖定,因爲在mem共享這是不需要的。舉辦活動通常需要更長的時間。 – bsobaid 2010-07-27 01:44:41
我只想讓有關共享內存的意見一般
- 預期共享內存映射到虛擬內存中不同的地方。這意味着在一個進程和下一個進程之間傳遞指針是無用的,您必須使用共享內存基址中的偏移量
- 您將無法訪問malloc/new和釋放/刪除堆管理功能,但您確實有很好的塊內存來設置你自己的內存管理對象。
- 您必須設計一個清晰的所有權模型,哪個進程可以訪問哪一塊內存。
- 跨進程共享的對象(如記賬對象)的任何訪問都必須受互斥鎖保護
- 尋找最小化鎖定互斥鎖時所用時間的策略,freelists是你的朋友。
- 在任何生產者消費者模型中,確保您清楚地瞭解流量控制。您不得溢出或下溢共享空間。信號量是你的朋友。
我認爲關於它。我同意上面的說法,而是使用IPC來複制內存,除非你真的必須使用共享內存,這些缺陷可能會讓你活着。
- 1. SEO:事情要考慮\實施你的網站的內容
- 2. NSUserDefaults與CFPreferences,需要考慮的事項
- 3. 實施IDisposable時需要考慮哪些風險?
- 4. CUDA零複製內存考慮事項
- 5. 更改Java文件的編碼時需要考慮的事項
- 6. 製作網站時需要考慮的事項?
- 7. 構建框架時需要考慮的事項
- 8. 在Rails中使用會話時需要考慮的事項
- 9. 需要考慮w/microsoft technologies的事情?
- 10. OSX和共享內存需要sudo
- 11. 網站啓用前需要考慮的事項
- 12. 使用消息代理之前需要考慮的事項
- 13. 推出BIG網站之前需要考慮的事項?
- 14. 移動網絡 - 需要考慮的事項?
- 15. Tomcat的共享裝載機不考慮
- 16. SQL Server中的時區考慮事項
- 17. C++:何時需要std :: vector的共享內存分配器?
- 18. 將Magento 1.7模塊/擴展適配到Magento 1.2時需要考慮的事項?
- 19. ASP.NET設計考慮事項
- 20. MVVM設計考慮事項
- 21. 實施Mondrian共享SegmentCache
- 22. 進行用戶控制之前需要考慮的重要事項是什麼?
- 23. 重複調用同一活動時是否需要考慮任何事項?
- 24. 爲數據倉庫選擇SCD類型時,您需要考慮哪些事項?
- 25. 在C中釋放內存時應該考慮的主要事情是什麼?
- 26. 需要共享實體的聚合體
- 27. 爲什麼合併需要你考慮共同的祖先?
- 28. 需要實施recaptcha
- 29. 什麼方式兩個構造之間共享代碼時要考慮
- 30. MySQL的查詢需要序列考慮
有關如何實現共享內存,請參見http://stackoverflow.com/questions/439787/how-to-implement-shared-memory-in-net。正如Steven Sudit所回答的,看起來您需要使用P/Invoke – 2010-07-26 18:27:16