回答
那么,从.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. 在Rails中使用会话时需要考虑的事项
- 8. 构建框架时需要考虑的事项
- 9. 需要考虑w/microsoft technologies的事情?
- 10. 共享内存 - 需要同步
- 11. 移动网络 - 需要考虑的事项?
- 12. 使用消息代理之前需要考虑的事项
- 13. 推出BIG网站之前需要考虑的事项?
- 14. SQL Server中的时区考虑事项
- 15. C++:何时需要std :: vector的共享内存分配器?
- 16. MVVM设计考虑事项
- 17. ASP.NET设计考虑事项
- 18. 进行用户控制之前需要考虑的重要事项是什么?
- 19. 重复调用同一活动时是否需要考虑任何事项?
- 20. 为数据仓库选择SCD类型时,您需要考虑哪些事项?
- 21. 在C中释放内存时应该考虑的主要事情是什么?
- 22. 为什么合并需要你考虑共同的祖先?
- 23. 需要实施recaptcha
- 24. boost :: interprocess :: named_mutex是否需要存储在共享内存中?
- 25. ConstructorInfo.Invoke的DynamicMethod,我需要考虑什么?
- 26. Webservice:考虑设计和安全考虑事项?
- 27. 我应该何时考虑在Grails中实施服务?
- 28. 需要帮助实施搜索选项
- 29. 开始构建数据访问层。需要考虑的事情?
- 30. 内存共享
有关如何实现共享内存,请参见http://stackoverflow.com/questions/439787/how-to-implement-shared-memory-in-net。正如Steven Sudit所回答的,看起来您需要使用P/Invoke – 2010-07-26 18:27:16