我的問題是我有一個我無法修改的32位DLL。在正常操作下,DLL有時可能需要大約1.5G的內存。P/Invoke是否爲目標DLL提供更少的內存?
當我使用C++ /非託管代碼測試程序時,該DLL只會在大約2個演出時耗盡內存。這是預期的,因爲這是可用於32位進程的最大大小。因此,在正常操作下,DLL運行良好。
當我從一個C#應用程序調用DLL時,它本身需要大約250 MB,當整個過程達到約1.4演出時,DLL出錯。我的問題是P/Invoke爲32位進程提供更少的內存使用?有什麼辦法可以讓它更多嗎?
編輯:P /調用函數實際上是從我的主要assumbly引用的C#程序集調用的。不知道這是否以任何方式相關。
它被一個64位機器上運行,但DLL是32位。我可以使我的項目64位,但據我所知這意味着我無法訪問32位DLL。 此外,我提到的1.4個演出是託管應用程序+進程的總內存(它們顯示在任務管理器中組合),因此它仍未達到2個演出組合。 –
@Jasmin我猜存在內存碎片,這是它在1.4GB時失敗的原因。看看您是否可以將託管應用程序標記爲'LARGEADDRESSAWARE',可能會有一些里程碑。 –
非常感謝內存碎片的簡要解釋。可能就是這樣發生的事情。 LARGEADDRESSAWARE似乎沒有幫助 - 可能需要嘗試其他解決方案。你知道在這種情況下製作一個CLI/C++包裝DLL可能會有一些好處,而不是直接從C#調用P/Invokes嗎? –