ASP.NET Web APIは素晴らしい技術です。 Web APIの作成は非常に簡単なため、多くの開発者は良い実行パフォーマンスを得るためにアプリケーションの構造化に時間を割きません。 この記事では、ASP.NET Web APIのパフォーマンスを向上させるための8つのテクニックを取り上げます。 1) 最速のJSONシリアライゼーションツールを使う JSONのシリアライズは、ASP.NET Web API全体のパフォーマンスに重要な影響を与えます。 あるプロジェクトで、JSON.NET シリアライザーからServiceStack.Textに1年半移行しました。 Web APIのパフォーマンスが約20%向上したと測定しました。 このシリアライズツールを試すことを強くおすすめします。 以下は、人気のあるシリアライゼーションツールのパフォーマンスに関する最近の比較データをいくつかご紹介します。 SerializerPerformanceGraf 出典:theburningmonk 追記:StackOverflowは、これまでのJSONシリアライゼーションツールであるJilを使っているようです。 テストデータは彼らのGitHubページ「Jil serializer」で確認できます。 2) DataReaderから手動でJSONをシリアライズする 私はこの方法をプロジェクトで使ってきて、パフォーマンス向上の効果を得ています。 DataReaderから手動でJSON文字列を作成すれば、不要なオブジェクト作成を避けられます。そうすれば、DataReaderから値を取り出してオブジェクトに書き込み、その後それらのオブジェクトから値を取ってJSONシリアライザでJSONを生成する必要がありません。 StringBuilderを使ってJSONを生成し、WebAPIのレスポンス内容として最後にStringContentを返します。
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(jsonResult, Encoding.UTF8, "application/json");
return response;
コードをコピーします
さらに多くの方法については、リック・ストラールのブログでご覧いただけます 3) 可能な限り他のプロトコル形式(プロトコルバッファ、メッセージパック)を使用すること プロジェクト内でプロトコルバッファやメッセージパックなど、JSONの代わりに他のメッセージフォーマットを使えるなら、 プロトコルバッファはシリアライズが非常に速いだけでなく、返送される結果ではJSONよりも速くフォーマットされるため、パフォーマンスが大幅に向上します。 4) 圧縮を実装する ASP.NET Web APIでGZIPやDeflateを使ってください。 圧縮はレスポンスパケットのサイズと応答性をシンプルかつ効果的に削減する方法です。 これは非常に重要な機能で、圧縮に関する記事は私のブログでご覧いただけます。8行のコードでWeb API GZip圧縮ActionFilter ASP.NET。 5) キャッシュの利用 Web APIメソッドで出力キャッシュを使うことは非常に深刻です。 例えば、多数のユーザーが1日に1回しか変わらないレスポンスコンテンツにアクセスする場合などです。 ユーザーパスワードをメモリにキャッシュするなどの手動キャッシュを実装したい場合は、私のブログ記事「Web APIでキャッシュを実装する簡単な方法」ASP.NET をご覧ください。 6) 可能な限り典型的な ADO.NET を使用すること 手動で書いた ADO.NET は、データベースから値を取得する最も速い方法です。 もしWeb APIのパフォーマンスが本当に重要なら、ORMは使わないでください。 最も人気のあるORM同士のパフォーマンス比較を見ることができます。 ORMMapper
洗練された手書きのフェッチコードは高速で、案の定、すべてのORMはこれら3つより遅いです。 結果セットキャッシュを持つLLBLGenは高速ですが、結果セットを再度繰り返し、オブジェクトをメモリに再度インスタンス化する必要があります。 7) Web APIに非同期アプローチを実装する 非同期のWeb APIサービスを使用すると、Web APIが処理するHTTPリクエストの数が劇的に増加します。 実装はシンプルで、asyncキーワードを使い、メソッドのリターンバリュータイプをTaskに変更するだけです。