PDA

View Full Version : شما در برنامه هاتون مرتبا قطع و وصل میشین؟



Developer Programmer
چهارشنبه 13 خرداد 1388, 07:28 صبح
سلام
در برنامه هاتون(ترجیحا تحت شبکه) آیا بعد از هربار Fill کردن، از دیتابیس Disconnect میشین و در مواقع لزوم دوباره کانکت میشین یا یکبار کانکت میشین و در هنگام بسته شدن برنامه Disconnect ؟

davoodrm666_666
چهارشنبه 13 خرداد 1388, 09:01 صبح
اساس ado.net بر پای روش غیر متصل است .

Developer Programmer
چهارشنبه 13 خرداد 1388, 20:26 عصر
داوود جان، میتونین یه لینکی ارائه کنید که این حرفتون رو نوشته باشه؟

من اخیرا توی یه شرکتی کار میکنم که میخواد برنامه تحت شبکه با 4000 یوزر بنویسه... از کلاسی که خودشون نوشتن استفاده میکنن که


clsDataAccess= new classDataAccess()
FillTextBox(txtFirstName);
FillTextBox(txtLastName);

یه بار کانکت میشه، دیتاست رو فیل میکنه؛ فیلدی رو به یه آبجکت مثل TextBox متصل میکنه. دیسکانکت میشه. باز دوباره کانکت میشه، فیل میکنه و به گرید متصل میشه و الی آخر

من اصلا نمیتونم قبول کنم که واسه هر آبجکت روی فرم و واسه هر عمل Select باید یکبار به سرور کانکت بشه، select بکنی و دوباره DC بشی... و انتظار داشته باشیم که چهار هزار یوزر بدون افت سرعت و بی نقص کار کنن.

اما اونا ادعا میکنن که این بهترین روشه...

bahman_akbarzadeh
پنج شنبه 14 خرداد 1388, 00:09 صبح
به نظر من اونا ادعاي درستي ميكنن.
موقعي كه بحث سر ارتباطات زياد بين يوزر ها و پايگاه داده هست، بهتره براي اينكه تعداد كاربران استفاده كننده از ديتابيس همزمان زياد نشه، كانكشن موقعي باز باشه كه لازمه و بعد بلافاصله بسته شه.
نگران هزينه اتصال مجدد به ديتابيس نباشين.
SQL Server تكنيكي به نام Connection Pooling داره كه هنگام اتصال مجدد يك ConnectionString ثابت، تنظيمات و داده هاي مورد نظرشو سريعتر لود ميكنه، يعني اصلا از حافظه خارج نمي كنه.

Developer Programmer
پنج شنبه 14 خرداد 1388, 00:50 صبح
بهتر نیست یکبار که DataSet رو پر کردیم، Binding رو انجام بدیم به جای اینکه به ازای هر آبجکت، Select کنیم و ترافیک رو بالا ببریم؟

bahman_akbarzadeh
پنج شنبه 14 خرداد 1388, 11:15 صبح
چرا.
اگه اونا اين كارو كرده باشن بايد بگم كار احمقانه اي كردن.
ولي تا سورسشون رو نديديم نبايد قضاوت كنيم.
شايد تو سازنده كلاسشون ، ديتاست رو پر كردن و با اون توابع از ديتاست مقدار ميگيرن.

sahmah65
چهارشنبه 20 خرداد 1388, 23:05 عصر
با سلام
مساله ای که باید در نظر گرفته بشه اینه که user ها در چه فاصله ای از زمان از داده های همدیگه
استفاده میکنن یعنی در واقع چقدر بهم وابسته هستند اگه وابستگی ها آنی باشه چاره ای نیست جز اینکه مرتبط داده ها بروز بشن .

majid325
شنبه 20 تیر 1388, 01:46 صبح
به نظر من هر چقدر هم که وابسته باشن این روش درست نیست، برای هر آبجکت یه بار عملیات وصل شدن به دیتابیس!!!!!
البته احتمالا یه موضوع آزاردهنده ای وجود داره که آقا افشین در جریان نیست.

ببخشید بعد از جواب دادن فهمیدم که آخرین پست برای یک ماه پیش هست.

اوبالیت به بو
شنبه 20 تیر 1388, 21:33 عصر
برای هر آبجکت یه بار عملیات وصل شدن به دیتابیس
راه حل شما چه؟

اگه ميشه ادامه بدين.

majid325
دوشنبه 22 تیر 1388, 22:28 عصر
راه حل شما چه؟

اگه ميشه ادامه بدين.

شما احتمالا متوجه نشدین که مشکل چیه!!!!!!!!
بر فرض مثال اگه 10 تا textBox رو فرم داشته باشن ، 10 بار کانکشن رو باز و بسته میکنن.

davoodrm666_666
سه شنبه 23 تیر 1388, 08:27 صبح
دوستان منظور از روش غیر متصل این نیست که شما برای هر کنترلی که روی فرم وجود داره یک بار برای ذخیره داده به دیتا بیس متصل شید این کار احمقانه است .
در روش غیر متصل : فرض کنید که شما توی فرم ثبت مشتری هستید بعد از دیتا اینتری کردن شما یک دکمه ثبت دارید که کد اتصال به دیتا بیس رو ( البته در روش سنتی) پشت این دکمه فراخوانی و اطلاعات رو ثبت می کنید
اما اگر از روش متصل از ابتدای برنامه استفاده کنید از ابتدای ورود به فرم ثبت مشتری شما به دیتا بیس متصل هستید نه زمانی که دکمه ثبت رو کلیک کنید . که این روش درست نیست

kerberos2023
چهارشنبه 24 تیر 1388, 07:12 صبح
سلام
معمولاً عاقلانه اینه که کانکشن رو باز نگه ندارن ولی اگه قراره توی یک فرم بارها یک دستور SQL اجرا بشه بهتره که کانکشن توی اون فرم باز بمونه چون هر بار کانکت شدن به دیتابیس سربار برای SQL ایجاد میکنه و با زیاد شدن یوزر ها این سربار هم زیاد میشه

L_eskandary
چهارشنبه 24 تیر 1388, 19:52 عصر
سلام
من فکر می کنم جواب شما رو بلدم . من یاد گرفتم که با معماری سه لایه و شاید چهار لایه و یک کلاس مجزا برا ارتباط با پایگاه داده استفاده کنم . الگویی که استفاده می کنیم Facade هستش و تو اون بر نوع سازنده مون رو با استفاده از متد Single tone می سازیم که در این صورت دیگه نیازی نیست connection و ارتباط با سرور مرتبا بازو بسته شود چون متد single tone یک بار از این کلاس یک ابجکت می سازه و این رو بررسی می کنه اگه کانکشن بسته باشه می ره باز می کنه و اگه هم قبلا یه بار بازش کردیم همون رو حفظ می کنه و به این ترتیب ترافیک شبکه مون کلی میاد پایین .

public static BaseClass bclass()
{

if (baseclass == null)
{
baseclass = new BaseClass();
}
return baseclass;

}


البته گفتم که داخل baseclass کلیه کارهایی که برا ارتباط با پایگاه داده نیاز هست قرار دادیم .

bahman_akbarzadeh
چهارشنبه 24 تیر 1388, 23:33 عصر
سلام
من فکر می کنم جواب شما رو بلدم . من یاد گرفتم که با معماری سه لایه و شاید چهار لایه و یک کلاس مجزا برا ارتباط با پایگاه داده استفاده کنم . الگویی که استفاده می کنیم Facade هستش و تو اون بر نوع سازنده مون رو با استفاده از متد Single tone می سازیم که در این صورت دیگه نیازی نیست connection و ارتباط با سرور مرتبا بازو بسته شود چون متد single tone یک بار از این کلاس یک ابجکت می سازه و این رو بررسی می کنه اگه کانکشن بسته باشه می ره باز می کنه و اگه هم قبلا یه بار بازش کردیم همون رو حفظ می کنه و به این ترتیب ترافیک شبکه مون کلی میاد پایین .

public static BaseClass bclass()
{

if (baseclass == null)
{
baseclass = new BaseClass();
}
return baseclass;

}

البته گفتم که داخل baseclass کلیه کارهایی که برا ارتباط با پایگاه داده نیاز هست قرار دادیم .

البته اين نكته رو هم در نظر بگيريد كه هيچ وقت تو پروژه هاي وب، اين كارو نكنين.
چون تعداد كانكشن همزمان، محدوده و ممكنه در روند كار وب سايت، اختلال ايجاد كنه.

اوبالیت به بو
پنج شنبه 25 تیر 1388, 17:20 عصر
من فکر می کنم جواب شما رو بلدم . من یاد گرفتم که با معماری سه لایه و شاید چهار لایه و یک کلاس مجزا برا ارتباط با پایگاه داده استفاده کنم . الگویی که استفاده می کنیم Facade هستش و تو اون بر نوع سازنده مون رو با استفاده از متد Single tone می سازیم که در این صورت دیگه نیازی نیست connection و ارتباط با سرور مرتبا بازو بسته شود چون متد single tone یک بار از این کلاس یک ابجکت می سازه و این رو بررسی می کنه اگه کانکشن بسته باشه می ره باز می کنه و اگه هم قبلا یه بار بازش کردیم همون رو حفظ می کنه و به این ترتیب ترافیک شبکه مون کلی میاد پایین .
کد:
public static BaseClass bclass() { if (baseclass == null) { baseclass = new BaseClass(); } return baseclass; }
البته گفتم که داخل baseclass کلیه کارهایی که برا ارتباط با پایگاه داده نیاز هست قرار دادیم


http://barnamenevis.org/forum/showpost.php?p=653476&postcount=22

بنده از این روش در برنامه به قول شما 3 لایه استفاده کردم یعنی connection رو در constructor کلاس DB قرار دادم اما جناب mehdi6755 (http://barnamenevis.org/forum/member.php?u=41233) با این روش مخالفت کردن و دلایلشون هم(pm) کاملاً درست بود.
مقاله:

http://barnamenevis.org/forum/attachment.php?attachmentid=30206&d=1240500476
و:

http://barnamenevis.org/forum/showpost.php?p=711523&postcount=5

majid325
جمعه 26 تیر 1388, 17:44 عصر
http://barnamenevis.org/forum/showpost.php?p=653476&postcount=22

بنده از این روش در برنامه به قول شما 3 لایه استفاده کردم یعنی connection رو در constructor کلاس DB قرار دادم اما جناب mehdi6755 (http://barnamenevis.org/forum/member.php?u=41233) با این روش مخالفت کردن و دلایلشون هم(pm) کاملاً درست بود.
مقاله:

http://barnamenevis.org/forum/attachment.php?attachmentid=30206&d=1240500476
و:

http://barnamenevis.org/forum/showpost.php?p=711523&postcount=5

Single tone یک الگو هست ، میشه راجع به معایبش و دلایل آقا مهدی بیشتر صحبت کنید ؟
در ضمن ما به لینکهای شما به دلیل Private بودن دسترسی نداریم.