2011-01-24 11 views
2

私はいくつかの画像処理を行うクラスライブラリ(GNGEngine.dllと呼ばれる)を作成しました。このdllには、特定のパターンの検索を行う主な機能として、ProcessBitmap()関数が含まれています。私はanothersフォームアプリケーションを作成し、dllの参照を取ることによってエンジンをテストしました。私はボタンをクリックしてdllのProcessBitmap()メソッドを呼び出しています。フォームアプリケーションは、画像を完全に処理するのに8秒かかります。コンソールアプリケーションがフォームアプリケーションよりもC言語で時間がかかる理由#

クライアントごとに、私はexe(コンソールアプリケーション)ファイルGNGEngineRunner.exeを作成しました。これはイメージファイル名を引数として取ります。私はdllクラスのオブジェクトを作成し、メソッドProcessBitmap()を呼び出し、処理のためにファイルを渡しました。同じ画像が処理に約1分かかります。

時間がかかりすぎる理由は何ですか?

あなたの貴重な時間を共有してくれてありがとう。

+2

詳細については言及しません。 –

+1

両方のアプリケーションをプロファイルしてください。このアプリは無料ですが、http://www.eqatec.com/Profiler/Download.aspxですが、そこから任意のプロファイラを選択することができます。プロファイリングの後、どのメソッドが最も時間を費やしたかを見ることができます。私の推測ですが、それはhttp://stackoverflow.com/questions/4154429/apartmentstate-for-dummiesに関連しています – Martheen

+1

プロファイリングを開始する前に、誤って2番目のケースでDLLのデバッグバージョンを使用していないことを確認してください。 –

答えて

1

まず、何が起こっているかを見るためにプロファイラを付けてください。試用版をお持ちでない場合は、http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/

Visual Studioにはパフォーマンスプロファイラが組み込まれていますが、VSのバージョンによっては、存在しない、うんざりしているものから良いものまであります。

第2に、理由はありません。私は問題は、存在しないフォーム/ GUIオブジェクトまたは同様のものへの参照のために例外がスローされていることだと思います。実行可能なコンソールまたはWinFormは100%同じで、1つのアプリケーションでそれらを混在させることもできます。唯一の違いは、フォームの代わりにコンソールウィンドウを作成するという事実といくつかの参照です。

詳細と、場合によってはコードを自由に入力してください。

+0

Teddに感謝します。プロファイラを使用します。 – IrfanRaza

1

あなたはあなたがやっていることややっていることを教えていないので、本当に答えが不可能に近づいています...しかし、あなたの最初のステップは何が起こっているのかについての適切な痕跡を得ることです。賢明な量のロギング(タイムスタンプを含む)を挿入すると、プロセスのどこで時間が経過しているかが合理的に明らかになります。コンソールバージョンとWindowsフォームバージョンの両方で実行します。次にボトルネックに集中してください。おそらく別のSOの質問にもっと詳しくと尋ねます。

+0

お返事ありがとうございました。私はちょうど詳細を提供するために私の質問を編集しています。 – IrfanRaza

関連する問題