PDA

View Full Version : سوال: وضعیت Connection در هنگام استفاده از LINQ



fa_karoon
پنج شنبه 19 آبان 1390, 20:25 عصر
زمانی که از دستورات SQL برای کار با پایگاه داده مان استفاده می کنیم نیاز است که قبل از دستور Connection را Open و بعد از آن Close کنیم
می خواستم بدانم وضعیت این باز و بسته شدن Connection در هنگام استفاده از LinQ به چه صورت است؟
آیا هر جا که از دستورات LINQ استفاده می کنیم خودش Connection را باز و بسته می کند؟
در حالت استفاده از دستورات SQL برای اینکه باز و بسته شدن ها زیاد نشود در ابتدای چند دستور کانکشن را باز می کردیم و در انتهای آنها می بستیم ، حال می خواهم بدانم اگر به ازای هر بار استفاده از دستورات LINQ کانکشن باز و بسته شود سربار ایجاد نمی شود که باعث کند شدن سایت شود؟
ممنون و سپاسگزارم

fa_karoon
چهارشنبه 25 آبان 1390, 18:17 عصر
دوستان خواهش می کنم یه نفر جواب بده، آخه می بینم اغلب اساتید این انجمن از LINQ استفاده می کنند مگر می شود کسی حرفه ای LINQ باشد اما این موضوع را نداند؟

zarrinnegar
یک شنبه 29 آبان 1390, 08:46 صبح
هر باز که از dataclass یک Object میگیری باز میشه و موقع خروج از پروسیجری که توش آبجکت رو ساختی کانکشن بسته میشه

اگه global بازش کنی تا موقعی که فرمت بازه کانکشن هست
سرعت رو پایین هم نمیاره من تو برنامه چند صد هزار رکوردی تست کردم

fa_karoon
یک شنبه 29 آبان 1390, 19:33 عصر
دوستان همین سوال رو در سایت 30sharp نیز پرسیدم و دقیقا اینگونه جواب گرفتم
سلام،


احتمالا منظور شما از LINQ همون LINQ to SQL هستش. بله LINQ در خود مکانیزمی برای مدیریت اتصالات پایگاه داده داره. معمولا هنگام اجرای کوئری اتصال رو باز کرده و هنگام از بین رفتن (Dispose) آبجکت دیتا کانتکست، اتصال رو می بنده.


من مقالات متفاوتی رو در مورد مدیریت اتصالات در LINQ مطالعه کردم که از مکانیزم های مختلفی از جمله به اشتراک گذاشتن اتصالات و به اشتراک گذاشتن دیتا کانتکست استفاده شده بود. در یک پروژه هم از این تکنیک ها استفاده کردم و به شدت پشیمان شدم چون این موضوع باعث عملکرد های پیش بینی نشده و عجیب و غریب در بسیاری از مواقع می شد.


بنابراین به شما نیز توصیه می کنم که از روش های توصیه شده برای نمونه سازی استفاده کنید یعنی قبل از اجرای کوئری، یک آبجکت از نوع دیتا کانتکست new کنید و آن را داخل بلاک using قرار دهید تا خودش Dispose بشه.


معمولا مدیریت اتصالات در رابطه با مدیریت منابع مورد بررسی قرار می گیره و نه راندمان و کارایی.


اگر به دنبال بالا بردن راندمان هستید بهتره که از روش های توصیه شده در کوئری ها و غیره استفاده کنید. با کمی جستجو در اینترنت می تونید این توصیه ها رو پیدا کنید.


پس خودتون رو نگران مدیریت اتصالات و سربار برنامه نکنید مگر اینکه در حال نوشتن برنامه خاصی هستید که لازم هست در هر ثانیه صدها یا هزاران درخواست رو هندل کنه.


امیدوارم مفید بوده باشه.
پیروز باشید
مرتضی صحراگرد


منبع سایت www.30sharp.com