خیلی از Memory Leakهای ریز تو پروژههای #CSharp از یه چیز ساده شروع میشن: فراموشکردن Dispose روی resourceهایی مثل
تو داتنت جدید، using راحتتر و خواناتر شده و اگر درست استفاده بشه، هم کد تمیزتر میشه هم از نشت حافظه و handleها جلوگیری میکنه. 👇
۱️⃣ الگوی قدیمی using بلاکی
اینجا بهمحض خروج از بلاک، هر دو object بهصورت خودکار Dispose میشن.
۲️⃣ الگوی جدید using declaration (از C# 8 به بعد)
برای کاهش nesting و خوانایی بیشتر:
تو این حالت، scopeِ
۳️⃣ نکته مهم در متدهای طولانی
اگر متد خیلی طولانیه و resource فقط تو یه بخش کوچیک لازم میشه، بهتره همون الگوی بلاکی رو نگه داری تا resource زودتر آزاد بشه و تا آخر متد تو حافظه نمونه.
۴️⃣ async و IAsyncDisposable
برای کلاسهایی که
اینجا در انتهای scope، بهجای
جمعبندی: استفاده درست از using (بهخصوص
🔗 مرجع رسمی Microsoft Docs:
https://learn.microsoft.com/dotnet/csharp/language-reference/statements/using
🔖 #CSharp #سی_شارپ #C# #using #dispose #memory #performance #_NET
👤 Developix
💎 Channel: @DevelopixCSharp
HttpClient، SqlConnection، فایلها و… 😅تو داتنت جدید، using راحتتر و خواناتر شده و اگر درست استفاده بشه، هم کد تمیزتر میشه هم از نشت حافظه و handleها جلوگیری میکنه. 👇
۱️⃣ الگوی قدیمی using بلاکی
using (var stream = File.OpenRead("data.json"))
using (var reader = new StreamReader(stream))
{
var content = reader.ReadToEnd();
Console.WriteLine(content);
}
اینجا بهمحض خروج از بلاک، هر دو object بهصورت خودکار Dispose میشن.
۲️⃣ الگوی جدید using declaration (از C# 8 به بعد)
برای کاهش nesting و خوانایی بیشتر:
using var stream = File.OpenRead("data.json");
using var reader = new StreamReader(stream);
var content = reader.ReadToEnd();
Console.WriteLine(content);
// در انتهای متد، خودشون Dispose میشن
تو این حالت، scopeِ
using var کل متده؛ یعنی پایان متد = زمان Dispose. این الگو توی متدهای کوتاه و تمیز عالی جواب میده و از بلاکهای تو در تو کم میکنه. 💡۳️⃣ نکته مهم در متدهای طولانی
اگر متد خیلی طولانیه و resource فقط تو یه بخش کوچیک لازم میشه، بهتره همون الگوی بلاکی رو نگه داری تا resource زودتر آزاد بشه و تا آخر متد تو حافظه نمونه.
۴️⃣ async و IAsyncDisposable
برای کلاسهایی که
IAsyncDisposable رو پیادهسازی میکنن (مثلاً بعضی clientهای شبکه):await using var client = new SomeAsyncClient();
await client.DoWorkAsync();
اینجا در انتهای scope، بهجای
Dispose، متد DisposeAsync صدا زده میشه و resourceها بهشکل async آزاد میشن.جمعبندی: استفاده درست از using (بهخصوص
using var و await using) یه راه خیلی ساده و کاربردی برای جلوگیری از Memory Leak و تمیز نگهداشتن کده. چند جای پروژه رو که resource سنگین دارن چک و این الگو رو اعمال کن؛ تأثیرش تو performance و پایداری سرویس کاملاً قابل لمسه. 🚀🔗 مرجع رسمی Microsoft Docs:
https://learn.microsoft.com/dotnet/csharp/language-reference/statements/using
🔖 #CSharp #سی_شارپ #C# #using #dispose #memory #performance #_NET
👤 Developix
💎 Channel: @DevelopixCSharp
❤1