استفاده صحیح از DbContext و فراخوانی متد Dispose در EF #2 را در این قسمت از وبسایت آموزش برنامه نویسی پرووید دانلود کنید.

استفاده صحیح از DbContext و فراخوانی متد Dispose در EF #2

نکته دیگری که قصد دارم به آن اشاره کنم این است که در تست‌های Performance اغلب تفاوت زیادی بین کدی که به صورت Explicit متد Dispose را اجرا میکند با کدی که فراموش میکند این کار را انجام دهد وجود ندارد. اما این قضیه یک استثنا دارد و آن هم باز کردن Explicit شی Connection درونی DbContext است. در چنین سناریویی اگر فراموش کنید شی Connection را ببندید DbContext آن را به صورت خودکار نخواهد بست. در واقع اگر شما اجازه دهید DbContext مسئولیت باز کردن و بستن Connection را به عهده بگیرد این کار را به صورت خودکار انجام می‌دهد اما اگر به صورت دستی شی Connection را باز کنید باید حتما خود شما آن را ببندید.

حال ممکن است بپرسید که باز گذاشتن شی Connection چه معایبی می تواند داشته باشد. اگر مبحث مربوط به Connection Pooling را بدانید متوجه منظورم خواهید شد. در واقع در Connection Pooling یک حوضچه از Connection ها ساخته شده و در زمان بسته شدن یک Connection آن شی Connection به Pool برگردانده می شود. این موضوع باعث می‌شود که کدهای قسمت های دیگر برنامه شما مجبور نباشند شی Connection جدیدی را بسازند. ساختن شی Connection یه کار پر هزینه از لحاظ منابع سیستم است. در واقع با استفاده از روش Connection Pooling به جای ساختن شی Connection جدید از اشیا Connection ی که در حوضچه یا Pool قرار گرفته اند استفاده می شود.

پس به عنوان نتیجه ‌گیری اگر به DbContext اجازه می‌دهید که Connection های شما را مدیریت کند می توانید از فراخوانی متد Dispose صرفنظر کنید اما اگر خودتان به صورت دستی Connection های درون DbContext را مدیریت کرده و آنها را باز یا بسته می کنید حتما باید در پایان کار از متد Dispose استفاده کنید.

در پایان قصد داریم تشکر کنیم که تا پایان این آموزش با ما همراه بودید. علاوه بر این از شما دعوت می‌کنیم تا از بسته آموزش Entity Framework وب سایت پرووید استفاده کنید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *