메모리 누수를 호출할 경우에서 관리되지 않는 코드 관리 코드에서 윈도우 7

StackOverflow https://stackoverflow.com/questions/1505489

문제

제가 관리되지 않는 C++코드에서는 C#코드를 일종의 메모리 누수가 일어나지 않습니다.
C++읽어 파일에서 데이터를 사용하려면 ifstream.읽기,쓰기를 벡터입니다.

이에 발생한 후 업그레이드 윈도우 7,에서 발생하지 않는 Vista,그러나 내가 사용하는 경우 버전의 기본 dll 을 컴파일된 비스타에,그것은 변화하지 않는다.
실행하는 경우 동일한 C++로 코드 없이 직접적으로 관리 interope,메모리 누설이 없!
실행하는 경우 관리 프로세스,그러나 내 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);

고 네 하나:

MyDll_Export bool APIENTRY MyMethod(
int x,
const wchar_t*  y, 
const wchar_t*  z,
bool v,
bool w)

을 때 저는 이것에서는 C++,나는 그것을 다음과 같다:

MyMethod(1, L"My String 1", L"My String 2", true, true)

에 보면 성능에 대한 카운터를 관리하고 관리되지 않는 메모리가 보는 모든 메모리에서 관리되지 않는 코드입니다.
을 고려하는 마샬링은 매우 간단하다,내가 이해하지 않는 이유 사이에는 차이가 있을 호출하는 C++직접 또는 이를 통해 C#.
난 몰라 왜 이런 일이에서만 Windows7(Windows 설치했다.net3.5SP1)이 있습니다.

사람이 아이디어가 있는 이유는 무엇인가요?

또한 누구나 알고있는 경우의 기본 메모리를 프로파일링 도구는 작품에서 창 7,나는 것을 알고 기뻐(을 위해 지금 나는 그 인쇄하여 콘솔 모든 명시적 메모리 할당 및 차이가 없습니다).

도움이 되었습니까?

해결책

나는 확실히 문제가 관련된 마샬 C#데이터 형태의 C++운 부분입니다.기 때문에 당신은 마샬링을 반환 값 bool 호 1 바이트 가치,어쩌면 당신은 동일한 작업을 수행해야 함수 arguments?C#bool 유형은 4 바이트,어쩌면 당신은 누출되고 있는가?

또한,지정하여 관리되지 않는 형식 문자열 데 도움이 될 수 있습니다.

[DllImport(DllPath, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool MyMethod(
        int x,
        [MarshalAs(UnmanagedType.LPWStr)]
        [In] string y,
        [MarshalAs(UnmanagedType.LPWStr)]
        [In] string z,
        [MarshalAs(UnmanagedType.I1)]
        bool v,
        [MarshalAs(UnmanagedType.I1)]
        bool w);

에 대한 설명 commentor:

C++bool 유형:

일반적으로 또는 null pointer 값은 false 로 변환되,다른 어떤 값을 변환하는 사실이다.

...

1998C++표준 라이브러리를 정의 전문성터 템플릿 bool.설명 클래스는 것을 나타냅 구현해야 포장 도록 요소는 모든 bool 사용 하나의 비트 메모리이다.

그래서,거의 모든 값을 사용하여,당신은 c++부울 값이 true 이거나 false 입니다.

다른 팁

불행하게도 당신을 포함,문자열 정렬 아이 간단합니다.

우리가 필요로 하는 일을 더하기 위해 데이터를 추적하는 데 도움이 이 문제를 해결합니다.를 제공할 수 있습니 다음

  • Native Method 명
  • 방법은 메모리에 대한 문자열에서 관리되는 네이티브 코드?
  • 아마 C++샘플을 사용하는 API?

편집

하려고 다음과 같은 서명이 있습니다.이렇게 CLR 지를 원수가 메모리에 모두 방향 하지만 그 대신에만 데이터를 전달합니다.

    [DllImport(DllPath, CharSet = CharSet.Unicode)]
    [return: MarshalAs(UnmanagedType.I1)]
    public static extern bool MyMethod(
            int x, 
            [In] string  y, 
            [In] string  z, 
            bool    v, 
            bool    w);

내가 발견의 사용 CLR 프로파일 도움을 찾을 때 나는 메모리 누수가 발생합니다.

당신은 확실에는 메모리 누수가 있습니다?

무엇이 당신의 기초에 대한 결정하는 메모리 누수가 일어나지 않습니다.당신은 당신이 그것을 볼 수 있는 성능 카운터에서,하지만 당신은 실제로 관찰?당신이 볼 coninously 상승 곡선 중 하나,또는에 정착 수준 높은?고 메모리 소비가 많은 혼란을 위한 메모리 누수가 발생합니다.

btw.게시할 수 있습니 C++함수 정의뿐만 아니?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top