none
Direct2D の CreateHwndRenderTarget のデバッグ時の実行時間について RRS feed

  • 質問

  • タイトルの通りなのですが、CreateHwndRenderTarget をデバッグ開始(F5)で実行すると
    約18秒くらい必ずかかります。デバッグなしで開始(Ctrl+F5)の場合は、計測していませんが
    1秒もかかっていません。
    Direct2D を使おうとしたときにデバッグ毎にこれだけ時間がかかるとなると困ってしまいます。
    この現象は、Direct2D のどのサンプルをビルド&デバッグしても再現します。

    同じことを経験した方、対処法など知りませんか?
    よろしくお願いします。

    環境
    Windows 7 Home Premiun 64bit
    Microsoft Visual C++ 2008 Express Edition
    Visual Studio 2008 
    2009年12月23日 14:06

回答

すべての返信

  • 自分のパソコン特有の問題でしょうか?
    以下のコードを実行したときに、時間がかかってるんです。

    DWORD t1 = ::GetTickCount();
    HRESULT hr = m_pFactory->CreateHwndRenderTarget(
        D2D1::RenderTargetProperties(),
        D2D1::HwndRenderTargetProperties(*this, sz),
        &m_pHwndRT
        );
    TRACE("#CreateHwndRenderTarget... %d msec\n", ::GetTickCount() - t1);

    *** 出力 ***
    #CreateHwndRenderTarget... 20717 msec
    2009年12月25日 23:10
  • 1つの可能性ですが、その時間がかかるときに出力ペイン(デバッグ - ウィンドウ - 出力だったかな)には、「シンボルを読み込みました」あるいは「シンボルが見つかりません」といった主旨のログがたくさん出ているということはありませんか?
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年12月26日 2:48
    モデレータ
  • 出力ペインを確認してみましたが、CreateHwndRenderTarget  を実行中は何も出力されていませんでした。

    また、CreateHwndRenderTarget の実行のタイミングを変えても、同様に時間がかかるので、
    前後に読み込んでいるdllは関係無いようです。
    2009年12月26日 7:16
  • パソコンを初期状態に戻して、インストールからやり直しましたが結果は一緒でした。
    もう、お手上げです。。。

    2010年1月9日 1:13
  • 一部の Intel 製グラフィックスアダプタにおいて、ドライバ側の問題により、
    デバッグ実行の速度が下がるという問題が報告されていますが、
    それではないでしょうか?
    2010年1月10日 7:37
  • 情報ありがとうございます。
    ドライバは最新になっていたので、バージョンアップで解決することを期待します。

    それにしても、同じ現象を体験した人はいないみたいですね。。。
    2010年1月12日 0:09
  • 環境が違いますが、以下環境では同じ現象は発生していません。

    [環境]
     OS:Vista SP2(32bit)
     Graphic Card:nVidia GeForce系
     Build:Debug Build

    [処理]
      RECT rc;
      GetClientRect(hwnd, &rc);

      DWORD t1 = ::GetTickCount();
      lpFactory->CreateHwndRenderTarget(
        D2D1::RenderTargetProperties(),
        D2D1::HwndRenderTargetProperties(hwnd,D2D1::SizeU(rc.right - rc.left,rc.bottom -   rc.top)),
        &wndTarget);
      DWORD t2 = ::GetTickCount();
      DWORD t3 = t2 - t1;

    [結果]
      437 ms

    Graphic Cardが異なるPCで試してみてはいかがでしょうか。
    Debugだけで発生する現象なら、Visual Studio 2010 Beta2で試してみる価値もありそうですね。

    2010年1月13日 3:48
  • 情報ありがとうございます。
    デバック環境だけなので、しばらく我慢して使うことにします。
    • 回答としてマーク びーしむ 2010年1月16日 0:07
    2010年1月16日 0:07