2016-06-27 13 views
0

私は非常に悪いWeb APIコードをC#で継承しました。私はそれを改善する必要があるが、どこから始めるべきか分からない。たくさんのクラスがあり、コードは悪夢です。私はまた、コードの一部が使用されることはないと思います。パフォーマンスをトレースして記録し、Web APIリクエストで呼び出すにはどうすればよいですか?

私は、各リクエストが呼び出された回数と、各リクエストが最後に何時だったかをカウントしたいと思います。すべての結果をテーブルに記録したい。 1日か2日で、私は最もよく使われているものと時間がかかるものの明確な視点を得ることができました。クライアントはそれについて不平を言っています。

私はログのためにNlogを使用し、パフォーマンスの計算には簡単なストップウォッチを使用します。何を指示してるんですか?トレース用にFilterと属性を使用する方が良いことは分かっていますが、このようなパフォーマンスをどのように記録してトレースすることができますか?

// GET api/Item/5 
public Item GetItem(string id) 
{ 
    // I don't use string.Format in my real code. This is just for this example. 
    logger.Trace(string.Format("Request: GET api/Item/{0}", id)); 
    Stopwatch sw = new Stopwatch(); 
    sw.Start(); 

    Item item = context.Items.Single(i => i.Code == id); 

    sw.Stop(); 
    logger.Trace(string.Format("Response: GET api/values/{0}\r\nElpased={1}\r\rn{2}", id, sw.Elapsed, response)); 

私は、これらすべてのトレースとパフォーマンスの仕事は私のconfigファイルから有効または無効になりますここでもちろん

http://weblogs.asp.net/fredriknormen/log-message-request-and-response-in-asp-net-webapi

Exact time measurement for performance testing

おかげで以前の情報を見つけました。 NLogのためにそれが組み込まれています。ストップウォッチのために、私は何かを構築するつもりです。私はこれを生産に常に生かしておくつもりはありません。

+0

Resharperはここでは役に立ちません。 Resharperは実行時に未使用の要求を検出できません。 –

+0

属性ベースのログを確認するhttp://stackoverflow.com/questions/13655541/wcf-service-attribute-to-log-method-calls-and-exceptions – Prathyush

+0

[OK]を、私の質問を読むオフピアPe'er。それはツールを使用せずに、コードを書くことに関するものです。 –

答えて

1

DelegatingHandlerを使用できます。

HTTPハンドラの基本タイプで、HTTP応答メッセージの処理を別のハンドラ、つまり内部ハンドラに委譲します。パイプラインに注入

enter image description here

あなたのコントローラのリクエスト処理の前と後の場所をキャプチャすることができます。

public class MonitoringDelegate : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
    var watcher = Stopwatch.StartNew(); 
    var response = await base.SendAsync(request, cancellationToken); 
    watcher.Stop(); 

    //log/store duration using watcher.ElapsedMilliseconds 

    return response; 
    } 
} 
-1

プロファイラーを見てください。このより一般的なアプローチ。我々はAnts performance profilerを使用します。

関連する問題