PDA

View Full Version : کانکت شدن به EF برای n امین بار



PetekDincos
دوشنبه 22 اسفند 1390, 09:12 صبح
با سلام
دوستان هنگام استفاده از ORM EF وقتی می خوایی برای اولین بار وصل بشی زمان زیادی می بره ولی برای دفعات بعدی این زمان خیلی کاهش پیدا می کنه نسبت به اولین کانکت سوال من اینجاست وقتی در یه برنامه که برای اولین بار وصل شده و سرعت کانکت شدن بهتر می باشه مثلا یه برنامه اجرا شده و یه مدت زمان طولانی هیچ اتصالی مجددا به EF اتفاق نیافتاده وقتی بعد از این مدت زمان دوباره می خوام یه کوئری از ORM بگیرم مثل بار اول زمان زیادی می بره برای حل این مشکل چه تغییری در تنظیمات EF بدم با تشکر

Sajjad.Aghapour
دوشنبه 22 اسفند 1390, 12:37 عصر
این رفتار به خاطر تکنیکی به نام Connection Pooling (http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx) هست. نگاهی به این مقاله (http://www.codeproject.com/Articles/17768/ADO-NET-Connection-Pooling-at-a-Glance) هم بد نیست

PetekDincos
دوشنبه 22 اسفند 1390, 18:10 عصر
این رفتار به خاطر تکنیکی به نام Connection Pooling (http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx) هست. نگاهی به این مقاله (http://www.codeproject.com/Articles/17768/ADO-NET-Connection-Pooling-at-a-Glance) هم بد نیست
با سلام
برای حل این مشکل چیکار کنم با تشکر

Sajjad.Aghapour
سه شنبه 23 اسفند 1390, 10:13 صبح
EF در این مورد چیزی نمیدونه و به تنظیمات Providerی که از اون دارید استفاده می کنید استناد می کنه. تنظیمات Pooling به طور پیش فرض طوری هستش که حداکثر Performance رو برای شما به وحود بیارن. من جایی ندیدم که کاری انجام بشه که این Connection تا ابد در لیست Pooling بمونه. چون بعد از یک مدت که یک Connection به صورت Idle بمونه به طور خودکار از حافظه پاک میشه(به عنوان Garbage) و دفعه بعد برای ارتباط نیاز هست که دوباره یک زمان برای ایجاد ارتباط فیزیکی صرف بشه. یه نگاه به این لینک (http://www.connectionstrings.com/Articles/Show/all-sql-server-connection-string-keywords) هم بندازید...

موفق باشید

PetekDincos
سه شنبه 23 اسفند 1390, 10:18 صبح
با سلام
پس با این وجود یعنی نمی شه کاری کرد. با تشکر

PetekDincos
جمعه 04 فروردین 1391, 11:49 صبح
با سلام
دوستان من برای حل این مشکل چیکار کنم هنگام استفاده از ORM , مطمئنا برای سایر دوستان نیز این مشکل پیش اومده دوستان برای حل این مشکل چیکار کردند یعنی راه حلی وجود نداره با تشکر

vcldeveloper
شنبه 05 فروردین 1391, 17:43 عصر
مثالی که در لینک زیر ارائه شده، باید بتونه مشکل شما را رفع کنه:

http://msdn.microsoft.com/en-us/library/bb738701.aspx

ایده اصلی اینه که اگر شما خودتان کانکشن را بسازید، اون رو باز کنید، و بعدش اون رو به یک ObjectContext بدید، اون کانکشن به طور خودکار بسته نمیشه، بلکه شما باید خودتون هر زمان که کارتان باهاش تمام شد، اون رو ببندید. در این حالت دیگه سربار باز و بسته شدن کانکشن دیتابیس به دفعات براتون تکرار نمیشه.

PetekDincos
شنبه 05 فروردین 1391, 18:32 عصر
با سلام
این شیوه درسته و کار می کنه فقط یه مشکلی که هست اینه که من برای کار با ObjectContext از یه کلاس استفاده کردم و در سازنده اون کلاس یه شی از Context ام درست می کنم و با متد هایی که در این کلاس وجود داره از Context کوئری می گیرم و در متد ها می شه یه بلاک finally گذاست و Context رو بست اما چون تعداد متد ها زیاده نمی خوام این کار رو برای تک تک متدها انجام بدم آیا راهی برای این Dispose کردن خودکار کلاس وجود نداره که بعد از گرفتن کوئری از طریق متد موجود در این کلاس کلاس خودش Dispose بشه و ما در متد Dispose بتونیم Context رو ببندیم با تشکر