Cuando llamo a un código C++ no administrado desde mi código C#, parece que tengo algún tipo de pérdida de memoria.
El C++ lee datos de un archivo utilizando ifstream.read y lo escribe en un Vector.pérdida de memoria al llamar código no administrado desde el código administrado en Windows 7
Esto ocurre solo después de actualizar a Windows 7, no ocurre en Vista, pero si uso una versión de la DLL nativa compilada en Vista, ¡no cambia nada!
¡Si ejecuto el mismo código de C++ directamente, sin el interoperabilidad administrado, no hay pérdida de memoria!
Si ejecuto el proceso administrado, pero dentro del proceso vshost, ¡no hay pérdida de memoria!
Aquí está la firma llamada:
[DllImport(DllPath, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool MyMethod(
int x,
string y,
string z,
bool v,
bool w);
y el nativo de uno:
MyDll_Export bool APIENTRY MyMethod(
int x,
const wchar_t* y,
const wchar_t* z,
bool v,
bool w)
Cuando llamo desde C++, lo llamo así:
MyMethod(1, L"My String 1", L"My String 2", true, true)
Cuando mira los contadores de rendimiento para la memoria administrada y no administrada, veo que toda la memoria proviene del código no administrado.
Teniendo en cuenta que el cálculo de referencias es bastante simple, no entiendo por qué hay una diferencia entre llamar a C++ directamente o mediante C#.
Tampoco sé por qué esto sucedería solo en Windows 7 (ambas instalaciones de Windows tenían .net 3.5 SP1).
¿Alguien tiene una idea de cuál es el motivo para esto?
Además, si alguien sabe de una herramienta nativa de creación de perfiles de memoria que funciona en Windows 7, me gustaría saber (por ahora acabo de imprimir para consolar todas las asignaciones explícitas de memoria y no hay diferencias).
LeakDiag [http://mcfunley.com/277/using-leakdiag-to-debug-unmanaged-memory-leaks] o AutomatedQA's AQTime puede hacer un análisis de fugas no administrado. –
¿Qué contador de rendimiento usa para medir el consumo de memoria? –
Ha etiquetado la pregunta "vshost.exe". ¿La aplicación se ejecuta en Visual Studio cuando se mide el consumo de memoria? –