اشتباه بزرگ در استفاده از HttpClient

اگر شما هم با زبان سی شارپ برنامه نویسی می کنید، حتما از کلاس HttpClient بارها استفاده کرده اید.

کلاس HttpClient یک کلاس پایه برای ارسال درخواست و دریافت پاسخ از یک منبع شناخته شده توسط URI می باشد، یا به زبان ساده تر برای ارسال درخواست و دریافت پاسخ توسط URI از این کلاس استفاده می کنیم.

من هم مثل همه شما با توجه به مستندات ارائه شده توسط مایکروسافت برای سالها از این کلاس به صورت زیر استفاده می کردم:

using(var client = new HttpClient()) { //Codes }

در یکی از پروژه ها متوجه شدم نرم افزار به صورت غیر معمولی ناپایدار است! با یک تغییر بسیار کوچک بازدهی نرم افزار بسیار بهتر شد و مشکل به صورت کامل حل شد!

عبارت using یکی از زیبایی های سی شارپ است و با استفاده از using دیگر نگران اشغال بیهوده منابع نخواهیم بود و وقتی بلاک using کامل شود متد dispose صدا زده می شود و منابع به صورت خودکار آزاد می شوند (Dispose).

استفاده از using بسیار معمول است و تغریبا در تمام کارها استفاده میکنیم، از اتصالات بانک اطلاعاتی گرفته تا Stream Writers.

در واقع هر شیئی که از منابع به صورت موقتی استفاده می کند و باید بعد از اتمام کار منابع را آزاد کند باید از اینترفیس IDisposable استفاده کند.

طبق مستندات مایکروسافت زمانی که از یک شیئ IDisposable استفاده می کنیم باید درون بلاک using از آن نمونه سازی کنیم.

طبیعتا وقتی از کلاس HttpClient استفاده می کنیم نیاز داریم تا بعد از استفاده کانکشن بسته شود و منابع آزاد شوند، ولی HttpClient کمی متفاوت است، بجای نمونه سازی از HttpClient برای هر درخواست باید یک نمونه از آن را در کل نرم افزار به اشتراک بگذاریم.

اجازه دهید با مثالی مطلب را دنبال کنیم:

یک برنامه کوتاه برای استفاده از کلاس HttpClient در زیر می بینید:

using System; using System.Net.Http;

namespace ConsoleApplication { class Program { public static void Main(string[] args) { Console.WriteLine("Starting connections"); for(int i = 0; i<10; i++) { using(var client = new HttpClient()) { var result = client.GetAsync("https://microsoft.com").Result; Console.WriteLine(result.StatusCode); } } Console.WriteLine("Connections done"); }

} }

همانطور که مشاهده می کنید قطعه کد بسیار ساده ای نوشته ایم که توسط بلاک using و با استفاده از کلاس HttpClient ده بار درخواست Get را برای سایت مایکروسافت ارسال می کند.


برای ادامه مطلب، دیدن تصاویر و همینطور دانلود سورس کد این آموزش به آدرس زیر مراجعه نمایید:

اشتباه بزرگ در استفاده از HttpClient

منبع: Sadin.Ir


/ 0 نظر / 18 بازدید