C# の Web アプリで async/await を使わないとどれくらい性能劣化するか見てみよう(.NET Framework編)
CRANK

前に ASP.NET Core で非同期と同期で3秒待ってレスポンス返すだけのプログラムを書いて Azure の Web Apps にデプロイして結果を見るという事をやりました。 ASP.NET 4.8 編になります。 デプロイした Web API純粋に Thread.Sleep(3000); で待つものと await Task.Delay(3000); で待つものの二種類を作りました。ASP.NET 4.8 の Web API のテンプレートで出力される ValuesController の Get() メソッドに対して上記の2種類のコードを追加しています。 同期版using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Threading; using System.Web.Http; namespace SyncWebApp.Controllers { public class ValuesController : ApiController { // GET api/values public IEnumerable<string> Get() { Thread.Sleep(3000); return new string[] { "value1", "value2" }; } // GET api/values/5 public string Get(int id) { return "value"; } // POST api/values public …

zenn.dev
Related Topics: C#
1 comments
  • Server Side 実装における非同期処理は非常に重要ですが、その大切さが分かる良い記事です。以下の記事も参考になります。

    要約

    • 非同期化することで Request Queue が詰まらないようにしよう
    • 同期的な I/O 待ちは CPU リソースの無駄
    • 非同期メソッド (async / await) を積極的に利用することで解決
    • ThreadPool の拡張は計画的に
      • 事前に拡張しておくことで高いスループットが期待できる
      • かなりメモリを使うことと初速が遅くなることは注意
      • ほとんどのケースでフレームワークの自動管理に任せるのがよい