Windows CE/Mobile アプリケーションのパフォーマンスのボトルネックを分析するために、Visual Studio 以外に知っているツールは何ですか? ネイティブ コードにコンパイルされた C/C++ アプリケーションをプロファイリングするために、CE/Mobile 用の AQTime のようなものを探しています。
4 に答える
Windows CE は、リモート コール プロファイラー(OEM がサポートを追加した場合) をすぐにサポートします。WinMo イメージは、通常、そのイメージで既にサポートされていると思います。CE の場合、IMAGEPROFILER 環境変数を設定する必要があります (プロジェクト プロパティを使用します)。
MSDN で明確でないのは、Platform Builder でビルドされていないアプリをインストルメント化する方法ですが、実際には非常に単純です。/callcap swith をコンパイラ コマンド ラインに追加し、cecap.lib をリンカー設定に追加する必要があります。
もちろん、プロファイラー データをキャプチャして表示するためのツールが必要です。そのためには、Platform Builder の評価版 ( 5.0または6.0 ) (評価は無料) またはeVC 4.0 (これも無料) を使用できます。
プロファイラーの使用方法の詳細については、CE コア チームの Sue Loh がブログで少し説明しています。
ネイティブ開発用の WindowsMobile 用のそのようなツールは見つかりませんでした。
私が見つけた最も近いものは EnTrek ツールセット (CodeSnitch / ProcMan) ですが、実際にはプロファイリング ツールではありません。 http://www.entrek.com/products.htm
私たちが行ったことは、VC++ 用の Vistual Studio "/callcap" スイッチを使用して、独自のプロファイリング サポートを自社製品に組み込むことです。このスイッチを使用すると、好きなようにタイミングとカウントをダンプするプロファイリング ライブラリを構築できます。ほとんどの場合はうまく機能しますが、これらのフック関数のオーバーヘッドが大きすぎる場合があり、タイミング結果が大量の関数呼び出しの領域に偏る可能性があります。
MSDN ドキュメントから:
/callcap オプションを指定すると、コンパイラは各関数の最初と最後にプロファイリング フックへの呼び出しを挿入します。
callcap スイッチを使用せずにプロファイリング フックをコンパイルする必要があります。callcap スイッチを使用してプロファイリング フック関数をコンパイルすると、関数は自身に対して無限再帰呼び出しを実行します。
次のコード例 Callcaphooks.c は、callcap なしでコンパイルするためのプロファイリング フック関数 _CAP_Enter_Function を示しています。
// File: callcaphooks.c
#include <stdio.h>
int main();
void _CAP_Enter_Function(void *p)
{
if (p != main)
printf("Enter function (at address %p) at %d\n",
p, GetTickCount());
return;
}
void _CAP_Exit_Function(void *p)
{
if (p != main)
printf("Leaving function (at address %p) at %d\n",
p, GetTickCount());
return;
}
Windows Mobile 用のコール グラフ プロファイラーを作成しました。現在 (2010 年 1 月現在) ベータ段階で、無料でダウンロードできます。
HTH
-ザック
.NET CF 開発を行っている場合は、Power Toys for .NET CF 3.5をチェックして、ボトルネック、特にメモリ関連のボトルネックを特定するのに役立つユーティリティを確認してください。