Quando chiamo un codice C++ non gestito dal mio codice C#, mi sembra di avere una sorta di perdita di memoria.
Il C++ legge i dati da un file usando ifstream.read e li scrive su un vettore.durante la chiamata di codice non gestito dal codice gestito in Windows 7
Questo succede solo dopo l'aggiornamento a Windows 7, non succede su Vista, ma se uso una versione della dll nativa che è stata compilata su Vista, non cambia nulla!
Se eseguo lo stesso codice C++ direttamente, senza l'interopeo gestito, non ci sono perdite di memoria!
Se eseguo il processo gestito, ma all'interno del processo vshost, non ci sono perdite di memoria!
Ecco la firma chiamata:
[DllImport(DllPath, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool MyMethod(
int x,
string y,
string z,
bool v,
bool w);
e il nativo uno:
MyDll_Export bool APIENTRY MyMethod(
int x,
const wchar_t* y,
const wchar_t* z,
bool v,
bool w)
Quando chiamo da C++, io lo chiamo così:
MyMethod(1, L"My String 1", L"My String 2", true, true)
Quando ho guarda i contatori delle prestazioni per la memoria gestita e non gestita, vedo che tutta la memoria proviene dal codice non gestito.
Considerando che il marshalling è piuttosto semplice, non capisco perché c'è una differenza tra chiamare il C++ direttamente o tramite C#.
Inoltre, non so perché ciò accadrebbe solo su Windows 7 (entrambe le installazioni di Windows avevano .net 3.5 SP1).
Qualcuno ha un'idea del motivo?
Anche se qualcuno è a conoscenza di uno strumento di creazione profili nativo che funziona su Windows 7, sarei felice di sapere (per ora ho appena stampato per consacrare tutta l'allocazione esplicita della memoria e non ci sono differenze).
LeakDiag [http://mcfunley.com/277/using-leakdiag-to-debug-unmanaged-memory-leaks] o AQTime di AutomatedQA possono eseguire analisi delle perdite non gestite. –
Quale contatore delle prestazioni si usa per misurare il consumo di memoria? –
Hai taggato la domanda "vshost.exe". L'applicazione viene eseguita in Visual Studio quando si misura il consumo di memoria? –