C# 코드에서 관리되지 않는 C++ 코드를 호출하면 메모리 누수가 발생하는 것 같습니다.
C++은 ifstream.read를 사용하여 파일의 데이터를 읽고 Vector에 씁니다.Windows 7에서 관리 코드에서 비 관리 코드를 호출 할 때 메모리 누수가 발생했습니다.
이것은 Windows 7로 업그레이드 한 후에 발생하며 Vista에서는 발생하지 않지만 Vista에서 컴파일 된 원시 DLL 버전을 사용하면 아무 것도 변경되지 않습니다!
동일한 간섭 코드가없는 동일한 C++ 코드를 직접 실행하면 메모리 누수가 없습니다!
관리되는 프로세스를 실행하지만 vshost 프로세스 내에서 메모리 누수가 발생하지 않습니다!
[DllImport(DllPath, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool MyMethod(
int x,
string y,
string z,
bool v,
bool w);
하고 원시 하나 : 나는 C++에서 호출
MyDll_Export bool APIENTRY MyMethod(
int x,
const wchar_t* y,
const wchar_t* z,
bool v,
bool w)
, 나는 다음과 같이 호출 :
MyMethod(1, L"My String 1", L"My String 2", true, true)
I를 여기
통화 서명입니다 관리되는 메모리와 관리되지 않는 메모리에 대한 성능 카운터를 살펴보면 모든 메모리가 비보안 코드에서 비롯된 것으로 나타났습니다.마샬링이 매우 간단하다는 점을 감안할 때 C++을 직접 호출하거나 C#을 통해 호출하는 것의 차이점은 무엇인지 이해할 수 없습니다.
또한 왜 이것이 Windows 7에서만 발생하는지 (두 Windows 설치 모두 .net 3.5 SP1을 가졌음) 알지 못합니다.
누구에게 어떤 이유가 있을까요?
또한 Window 7에서 작동하는 네이티브 메모리 프로파일 링 도구를 아는 사람이라면 기꺼이 알 수 있습니다 (지금은 모든 명시 적 메모리 할당을 콘솔에 인쇄 했으므로 아무런 차이가 없습니다).
LeakDiag [http://mcfunley.com/277/using-leakdiag-to-debug-unmanaged-memory-leaks] 또는 AutomatedQA의 AQTime은 관리되지 않는 누출 분석을 수행 할 수 있습니다. –
메모리 소비 측정을 위해 어떤 성능 카운터를 사용합니까? –
"vshost.exe"라는 질문에 태그를 지정했습니다. 메모리 사용량을 측정 할 때 응용 프로그램이 Visual Studio에서 실행됩니까? –