web-dev-qa-db-ja.com

RestClientは、すべてのリクエストに対してシングルトンまたは新規である必要があります

ASP.Net HttpClientは破棄される可能性があり、多くの記事ではパフォーマンスのためにシングルトンパターンを使用する必要があると述べていますが、RestClientを表示すると破棄できないため、 Recommended-Usage サンプルのページnewRestClient問題が発生するたびにRestClientにシングルトンパターンを使用するか、new毎回、もし私がnew毎回それを実行すると、パフォーマンス上の懸念はありますか?

RestSharp GitHub

いくつかの参照:

HttpClientとHttpClientHandlerを破棄する必要があります

HTTPCLIENT WRONG AND IT ITを使用していますISソフトウェアを非安定化しています

13
MichaelMao

restClientにシングルトンパターンを使用する必要がありますか、それとも毎回新しくする必要があります。毎回新しい場合、パフォーマンスに問題はありますか?

RestSharpの推奨される使用方法は、リクエストごとに新しいインスタンスを作成することです。

HttpClientに推奨されるシングルトンアプローチとは異なります。そして、その理由は 内部RestSharpHttpWebRequestではなくHttpClientをHTTP対話に使用することです。これが、使用モデルが異なる理由です。

毎回作成すると、HttpClientと同じようにパフォーマンスの問題が発生しますか?

リクエストごとにHttpClientの新しいインスタンスを作成してはならない主な理由は、パフォーマンスに関する考慮事項ではありません。作成と初期化に費やされる時間は、次のネットワーク呼び出しに費やされる時間のほんの一部です。 HttpClientのシングルトンインスタンスを使用する主な理由 次は

HttpClientは、一度インスタンス化され、アプリケーションの存続期間を通じて再利用されることを目的としています。リクエストごとにHttpClientクラスをインスタンス化すると、高負荷時に使用可能なソケットの数がなくなります。これにより、SocketExceptionエラーが発生します。

RestSharpは、接続プールをHttpClientとして使用せず、使用後にソケットを開いたままにしません。これが、リクエストごとにRestClientの新しいインスタンスを作成することが安全(かつ推奨)な理由です。

RestClientの再利用インスタンスを使用すると、パフォーマンスが向上しますか?さて、オブジェクトの作成とその初期化の時間を節約できます。ただし、この時間は0に非常に近く、さらに、ネットワークコールの追跡に費やされる時間のごく一部です。パフォーマンスを考慮して、List<T>などの他の.NETオブジェクトを再利用しませんか? RestClientについても同じようにする必要があります。そのような使用シナリオを示唆する方法で開発されただけです。

23
CodeFuller