我正在开发其由两个部分组成的应用程序:传递大的数据结构以非托管代码使用固定指针
- C#前端
- C++算术达
在某些情况下从C#传递到C++的数据量可能非常大。我正在谈论Gb,也许更多。特别是有大量的双精度数组,我想将一个固定/固定指针传递给C++代码。嘎吱嘎吱的数字可能需要几个小时才能完成。我担心可能由于使用固定指针而触发任何问题。正如我所看到的,垃圾收集器将无法长时间触摸这个大内存区域。这会导致任何问题吗?我应该考虑一个不同的策略吗?
我认为,而不是传递整个数组,我可以提供一个接口,用于在C++代码中构建此数组,以便内存由应用程序的非托管部分拥有。但最终,这两种策略都会创建大量内存,而这些内存很长一段时间对于C#垃圾收集器来说不可重新定位。我错过了什么吗?
在LOH中多次分配高达GB或更多没有不利影响? – Alex
从.net 4.5.1开始,可以“按需”对LOH进行压缩(http://blogs.msdn.com/b/mariohewardt/archive/2013/06/26/no-more-memory-fragmentation-on- the-large-object-heap.aspx) –
@ Christian.K所以它不是自动的,而是每个方法的调用。看来我很好吗? – Max