我正在開發其由兩個部分組成的應用程序:傳遞大的數據結構以非託管代碼使用固定指針
- 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