View Full Version : سوال در مورد تفاوت استفاده از Using در کار با دیتابیس
jaykob
چهارشنبه 30 دی 1394, 11:08 صبح
سلام و احترام
من در حقیقت می خوام می خوام بدونم که ما چه زمان هایی باید از بلوک Using استفاده کنیم و چه زمان هایی نباید استفاده کنیم و تا چه حد در سرعت تاثیر می زاره . ممنون می شم به صورت عمقی توضیحات مربوط را در مورد تفاوت دو کد زیر بفرمایید
Public ActionResult Register()
{
using(var db=new ApplicationDbContext())
{
// Insert Command
}
}
Public ActionResult Register()
{
var db=new ApplicationDbContext();
// Insert Command
}
با تشکر و احترام
hakim22
پنج شنبه 01 بهمن 1394, 10:03 صبح
در دات نت هروقت شما با چیزی کار می کنید که شامل کد مدیریت نشده هست باید از Using استفاده کنید. این یک توصیه در جهت استفاده ی بهینه از منابع سیستم است و لزما باعث عدم اجرای برنامه یا باگ نمی شود. امروزه سیستمها منابع استفاده نشده ی زیادی دارند و به چالش کشیدن چند گیگابایت رم با پردازنده های چند هسته ای به این آسانی ها ممکن نیست.
منظور از کد مدیریت شده Managed Code این هست که کد در زمان لازه به طور خوکار از حافظه خارج میشود. به طور کلی کلاسهای دات نت دارای این قابلیت هستند. اما بخشهای از دات نت به منابع خارجی (مثل فایلها یا دیتابیس ها یا موتورهای بازی و اشیای COM ...) متصل میشوند که با دات نت نوشته نشده اند و تضمینی برای خالی شدن حافظه بعد از پایان کارشان نمی دهند. به این نوع کدها Unmanaged Code یا کد مدیریت نشده گفته میشود.
هر وقت شما با کد مدیریت نشده سروکار داره بهتر است آن بخش درون یک Using قرار بگیرد.
هر وقت شما کلاسی تعریف کردید و درون اون کلاس از اینترفیس IDisposable استفاده کردید یعنی شما مجبور بودید برای خالی کردن منابع کلاس مستقیما کد نویسی کنید (UnManaged Code دارید)
در این مواقع هم باید از Using استفاده کنید.
jaykob
پنج شنبه 01 بهمن 1394, 11:16 صبح
در دات نت هروقت شما با چیزی کار می کنید که شامل کد مدیریت نشده هست باید از Using استفاده کنید. این یک توصیه در جهت استفاده ی بهینه از منابع سیستم است و لزما باعث عدم اجرای برنامه یا باگ نمی شود. امروزه سیستمها منابع استفاده نشده ی زیادی دارند و به چالش کشیدن چند گیگابایت رم با پردازنده های چند هسته ای به این آسانی ها ممکن نیست.
منظور از کد مدیریت شده Managed Code این هست که کد در زمان لازه به طور خوکار از حافظه خارج میشود. به طور کلی کلاسهای دات نت دارای این قابلیت هستند. اما بخشهای از دات نت به منابع خارجی (مثل فایلها یا دیتابیس ها یا موتورهای بازی و اشیای COM ...) متصل میشوند که با دات نت نوشته نشده اند و تضمینی برای خالی شدن حافظه بعد از پایان کارشان نمی دهند. به این نوع کدها Unmanaged Code یا کد مدیریت نشده گفته میشود.
هر وقت شما با کد مدیریت نشده سروکار داره بهتر است آن بخش درون یک Using قرار بگیرد.
هر وقت شما کلاسی تعریف کردید و درون اون کلاس از اینترفیس IDisposable استفاده کردید یعنی شما مجبور بودید برای خالی کردن منابع کلاس مستقیما کد نویسی کنید (UnManaged Code دارید)
در این مواقع هم باید از Using استفاده کنید.
سلام
خیلی ممنون از شما . پس من اینطور برداشت کردم که به طور مثال ما از یک وب سرویس استفاده می کنیم بهتره که using استفاده کنیم و برای ارتباط با دیتابیس که کلاس applicationdbcontext رو بازسازی می کنیم نیازی نیست از using استفاده کنیم . آیا این مورد درست است ؟ و همجا در مورد ارتباط با دیتابیس صدق می کنه ؟
تشکر و احترام
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.