コードインスペクション:短命な 'HttpClient'
このインスペクションは、メソッド内や using ブロック内など、短命なスコープ内で HttpClient がインスタンス化されるケースを識別します。
HttpClient は IDisposable を実装していますが、一度インスタンス化すればアプリケーションのライフサイクル全体を通して再利用されるように設計されています。 リクエストごとに新しいインスタンスを作成すると、 ソケットが枯渇する可能性があります。 これは、 HttpClient が破棄された後でも、基盤となるソケットがオペレーティングシステムによってすぐに解放されない(TIME_WAIT 状態のままになる)ためです。
public class Connection
{
static async Task<string> GetDataAsync0(string url)
{
var client = new HttpClient();
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
public class Connection
{
private static readonly HttpClient Client = new();
static async Task<string> GetDataAsync0(string url)
{
var response = await Client.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
このインスペクションに対する応急処置は、 HttpClient インスタンスを private static readonly フィールドに昇格させることで、複数の呼び出しで再利用されるようにします。
2026 年 6 月 12 日