none
GetDefaultAudioEndpoint関数を実行するたびにアプリケーション使用メモリが増加する RRS feed

  • 質問

  • IMMDeviceEnumerator のメソッド関数である

    GetDefaultAudioEndpoint を実行するとそのたびに実装しているプロセスのメモリ使用量が増加していくのですが

    これを回避する方法はあるのでしょうか。

    以下のコードを実行するとメモリ使用量が増えていきます。

    -----------------------------------------------------

    HRESULT hr;

    IMMDeviceEnumerator* pIEnum = NULL;

    IMMDevice* pIDev = NULL;

     

    hr = CoInitialize(NULL);

    if(FAILED(hr)) return ;

     

    hr = CoCreateInstance(

     __uuidof(MMDeviceEnumerator), NULL,

     CLSCTX_ALL, __uuidof(IMMDeviceEnumerator),

     (void**)&pIEnum);

    if(FAILED(hr)) goto FIN;

     

    pIEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pIDev);

     

    FIN:

    if(pIDev) pIDev->Release();

    if(pIEnum) pIEnum->Release();

    CoUninitialize();

    return ;

    -----------------------------------------------------

    最後にReleaseを行うことでメモリが解放されると考えていたのですが

    認識が間違っているでしょうか。

     

    OS はWindows7 (SPなし)32bit/64bit で確認しています。

     

    よろしくお願いいたします。

    **************************************

    追記です(2011/4/11)

    この問題が再現する条件を1つ見つけました。

    ■条件

    - USBオーディオデバイスを7個PCに接続

    - オンボードオーディオデバイスとして2つ認識

    - 計9個のオーディオデバイスが認識している状態

    - USBオーディオデバイスの1つが既定デバイスとして設定

    ■手順

    1. USBオーディオデバイスを1つ切断

    2. 切断したUSBオーディオデバイスを再び接続

    3. 上記の"GetDefaultAudioEndpoint"をコール

     

    これによりメモリが増加していくという現象が再現しました。

    オーディオデバイスが9個という時点でかなりレアなケースではあると思います。

     

    • 編集済み tnkentre 2011年4月11日 3:01
    2011年3月28日 5:17

すべての返信

  • IMMDeviceEnumerator のメソッド関数である

    GetDefaultAudioEndpoint を実行するとそのたびに実装しているプロセスのメモリ使用量が増加していくのですが

    これを回避する方法はあるのでしょうか。

    以下のコードを実行するとメモリ使用量が増えていきます。

    提示されたコードを使って試してみたのですが、こちらの環境(Windows7/64bit)では特にメモリ使用量が増加していくことを確認出来ませんでした。

    _CrtSetDbgFlag や ProcessExplorer を使って確認したのですが、何か他に条件はありませんか?

    もっとも音源ドライバが関係している気がしなくもないのですが…


    電柱一家
    • 回答としてマーク 山本春海 2011年4月7日 8:48
    • 回答としてマークされていない tnkentre 2011年4月11日 4:00
    2011年3月28日 8:24
  • 電柱一家 様

    ご調査頂いてありがとうございます。

    ドライバが原因かもということで、既定デバイスを別のドライバに変更して実行した結果、確かにメモリが増加するという現象は起きなくなりました。

    しかし、再度問題が起きたドライバを既定デバイスに設定して試したところ、こちらでも発生せず問題が見えなくなってしまいました。もう少し再現する条件を探ってみたいと思います。

    2011年3月28日 9:43