Diagnosi di perdite di memoria nativa in un'applicazione gestita è (almeno inizialmente) molto simile alla diagnosi di perdite di memoria in qualsiasi altra applicazione nativa.
Il modo in cui normalmente mi avvicino a questi problemi è far sì che il processo perda una grande quantità di memoria, eseguire un dump completo del processo e quindi esaminare il dump per vedere che cosa sta utilizzando la maggior quantità di memoria. Ad esempio se il tuo processo ha un normale/iniziale byte privato di ~ 20MB ma puoi far sì che il tuo processo perdi memoria finché non ha ~ 200MB di byte privati, allora c'è una buona probabilità che vengano persi circa 180MB di quella memoria - generalmente parlando qualunque cosa abbia più memoria allocata è dove dovresti iniziare a cercare.
Microsoft ha uno strumento molto utile chiamato DebugDiag - inizialmente sviluppato per l'utilizzo nella diagnosi di perdite di memoria in IIS è uno strumento molto vesatile e molto utile quando si affrontano problemi di memoria. Se gli dai un crash dump, eseguirà alcune analisi e dovrebbe (come minimo) dirti quale modulo ha allocato tutta quella memoria, puoi quindi iniziare a guardare in modo specifico a come quel modulo viene usato.
Sai dov'è la perdita? Non possiamo aiutarti senza il codice ... –
Non scrivi codice nativo in C#. Sicuramente l'unica cosa che puoi fare è assicurarti di gestire correttamente InterOp? –
Questo è un problema comune con i profiler, ti dicono più di quello che volevi sapere. Crescere byte privati non è inusuale, può richiedere del tempo prima che si stabilizzi. Ottieni effettivamente eccezioni OutOfMemory? In caso contrario, lanciare il bit ignore per questo. –