私のアプリケーションには、フロントエンドとデータベースの間に WCF サービス層があります。現在 IIS6 でホストしているため、SOAP over HTTP を使用しています。アプリケーションでシリアライゼーション アクティビティに費やしている実際の時間を調べるにはどうすればよいですか?
4 に答える
測定ではなく、改善について: 私は、.NET で使用するための Google の「プロトコル バッファー」(コンパクトで低 CPU のバイナリ シリアル化形式) の実装であるprotobuf-netに取り組んできました。 DataContractSerializer)。シリアライゼーションに関するかなり良いメトリックがいくつかあります。
基本的な http バインディングで使用すると、MTOM でも機能するため、バイナリの base-64 オーバーヘッドさえも発生しません。ここに WCF サンプルがあります。
興味があるかも…
メッセージインスペクターを作成し、それをエンドポイントの動作に追加します。
メッセージインスペクタでは、次のメソッドを持つインターフェイスを実装します
AfterReceiveRequest
{
DateTime start = datetime.now;
return start;
}
BeforeSendReply
{
// start will be passed in as state in the parameter.
TimeSpan period = datetime.now - start
}
古いメインフレームが常に使用していた非常に単純なことの1つは、応答に「サーバー時間」フィールドを含めることでした。したがって、観測時間とサーバー時間の間に発生したことは、ネットワーク/シリアル化のオーバーヘッドであることがわかります。私はそれが1960年代のようなものであることを知っていますが、それでもうまく機能します。
メソッドシグネチャの変更を避けたい場合は、http応答ヘッダーなどに設定できます;)
クライアント上のWindowsServer2008およびVistaで実行できる場合は、 xperfツールが適しています。これらはETWベースであり、Windowsサンプルプロファイル割り込みを使用して、システムで実行されているすべてのものをプロファイルします。これが私自身のxperfツールに関する一連の投稿です。この投稿は特にプロファイリングに関するものです。
このページのツールの最新バージョンを直接ダウンロードできることに注意してください。
ディスクIOやハード障害など、他のカーネルイベントのいくつかを試してみることをお勧めします。