PDA

View Full Version : تفاوت روش Fill کردن یک دیتاتیبل و روش استفاده از DataReader (پارامتر سرعت)



hanieh66
پنج شنبه 20 تیر 1387, 08:55 صبح
سلام
(اول بگم که این مطلب رو توی بخش دات نت فریم ورک و در ادامه یک تاپیک دیگه زدم ولی کسی چیزی نگفت)

من روی یک پروژه که از اکسس استفاده می کنه دارم کار می کنم و تحت شبکه هم هست و مثل همیشه پارامتر سرعت خیلی خیلی مهمه. شنیدم که fill کردن یک دیتاتیبل زمانگیرتره (درواقع گفتن که اگه بصورت دیتاریدر کار کنیم بهتره. درسته؟) و بهتره از روش دیتا ریدر استفاده کنیم. من این موضوع رو دقیق نمی دونستم. در این مورد می خواستم چیزی بدونم و اینکه مثلا توی اکسس چیزی مثل Bulk وجود داره ؟؟ اگه داره توضیح مختصری بدین.
و اینکه چرا ؟؟ و دلیلش چیه که سرعت دیتاریدر بیشتره؟؟؟ و لطفا یه نمونه کوچک رو هم پیاده سازیش رو توضیح بدین.

Mahdi.Kiani
پنج شنبه 20 تیر 1387, 09:21 صبح
سلام
(اول بگم که این مطلب رو توی بخش دات نت فریم ورک و در ادامه یک تاپیک دیگه زدم ولی کسی چیزی نگفت)

من روی یک پروژه که از اکسس استفاده می کنه دارم کار می کنم و تحت شبکه هم هست و مثل همیشه پارامتر سرعت خیلی خیلی مهمه. شنیدم که fill کردن یک دیتاتیبل زمانگیرتره (درواقع گفتن که اگه بصورت دیتاریدر کار کنیم بهتره. درسته؟) و بهتره از روش دیتا ریدر استفاده کنیم. من این موضوع رو دقیق نمی دونستم. در این مورد می خواستم چیزی بدونم و اینکه مثلا توی اکسس چیزی مثل Bulk وجود داره ؟؟ اگه داره توضیح مختصری بدین.
و اینکه چرا ؟؟ و دلیلش چیه که سرعت دیتاریدر بیشتره؟؟؟ و لطفا یه نمونه کوچک رو هم پیاده سازیش رو توضیح بدین.

اینکه در کجا و از چه روشی استفاده شود، بسته به برنامه شما و معماری برنامه شما دارد..

DataReader اطلاعات شما را به صورت Read and forward Only ( فقط خواندنی و قابل باز گشت به عقب هم نیست) در اختیار شما قرار می دهد... علاوه بر این DataReader به صورت Connected داده های شما را fetch می کند...
در مقابل DataTable و کامل تر از اون یعنی DataSet که میشه گفت یک Mini RDBMS هست، به صورت DisConnected کار می کنند... یعنی پس از برقراری ارتباط با DataSource و گرفتن داده ها از آن، ارتباط خود را با DataSource قطع می کنند.. کار ها انجام می شود، و سپس در صورت لزوم ارتباط مجددی با DataSource شما بر قرار می شود( برای update کردن)

علاوه بر این می توانید از روش های Async برای Fetch کردن داده ها استفاده نمایید که به performence بالاتری دست پیدا کنید
موفق باشید

jaza_sa
پنج شنبه 20 تیر 1387, 10:18 صبح
علاوه بر این می توانید از روش های Async برای Fetch کردن داده ها استفاده نمایید که به performence بالاتری دست پیدا کنیدسلام
آقای کیانی ، آیا میتونید یکم بیشتر درباره روش Async توضیح بدید؟

متشکرم

hanieh66
پنج شنبه 20 تیر 1387, 11:26 صبح
اینکه در کجا و از چه روشی استفاده شود، بسته به برنامه شما و معماری برنامه شما دارد..

DataReader اطلاعات شما را به صورت Read and forward Only ( فقط خواندنی و قابل باز گشت به عقب هم نیست) در اختیار شما قرار می دهد... علاوه بر این DataReader به صورت Connected داده های شما را fetch می کند...
در مقابل DataTable و کامل تر از اون یعنی DataSet که میشه گفت یک Mini RDBMS هست، به صورت DisConnected کار می کنند... یعنی پس از برقراری ارتباط با DataSource و گرفتن داده ها از آن، ارتباط خود را با DataSource قطع می کنند.. کار ها انجام می شود، و سپس در صورت لزوم ارتباط مجددی با DataSource شما بر قرار می شود( برای update کردن)

علاوه بر این می توانید از روش های Async برای Fetch کردن داده ها استفاده نمایید که به performence بالاتری دست پیدا کنید
موفق باشید

حرفاتون رو قبول دارم ولی هنوز جواب سوالام رو نگرفتم!
در حالت کلی در انتقال حجم اطلاعات زیاد (به این علت که دریافت تمام رکوردها بصورت دیتاتیبل و دیتاست و کار بصورت disconnected زمان می بره و یک نکته مهم اینکه این داده ها باید توی RAM قرار بگیرن و بخاطر حجم بالا در نهایت باعث اشغال فضای زیادی از حافظه می شن که همشون هم بدرد نمی خورن) چه روشی رو توصیه می کنین بنا بر تجربه و یا دید فنی که البته من تجربه رو ترجیح می دم.

و همونطور که گفتم از اکسس استفاده می کنم، آیا می تونم بصورت آسنکرون کار کنم در این محیط؟؟؟؟

نکته دیگه اینکه به ذهنم رسید الان آیا می تونم هر دفعه که برای Select query ها به بانک وصل می شم مثل توی وب کار کنم و اطلاعات رو بصورت صفحه بندی در اختیار کاربر قرار بدم و مثلا هر صفحه رو که خواست روی شمارش کلیک کنه و اطلاعات مربوط به اون صفحه نمایش داده بشه؟
اگه اینطوریه sysntax دستور sql مربوط به اینکار رو هم (به یک صفحه خاص از بازجست برگشت داده شده از بانک برم) در اختیارم بذارین .نمیتونم پیداش کنم.

امیدوارم منظورم رو رسونده باشم.

sinpin
پنج شنبه 20 تیر 1387, 12:11 عصر
آیا میتونید یکم بیشتر درباره روش Async توضیح بدید؟
تاپيك زير به همين مباحث اختصاص داره :
http://barnamenevis.org/forum/showthread.php?t=109257


همونطور که گفتم از اکسس استفاده می کنم، آیا می تونم بصورت آسنکرون کار کنم در این محیط؟؟؟؟
خير نميتونيد.

mehdi.mousavi
پنج شنبه 20 تیر 1387, 13:07 عصر
تاپيك زير به همين مباحث اختصاص داره :
http://barnamenevis.org/forum/showthread.php?t=109257

خير نميتونيد.

سلام.
چرا نمیشه Asynchronous کار کرد؟ مگه نمیشه دو تا Query رو همزمان به MS-Access فرستاد؟

RED-C0DE
پنج شنبه 20 تیر 1387, 19:08 عصر
اشتباه متوجه شدین دوست عزیز...
--
منظورتون از اینکه دو تا Query رو همزمان به اکسس فرستاد چیه؟

mehdi.mousavi
جمعه 21 تیر 1387, 13:21 عصر
اشتباه متوجه شدین دوست عزیز...
--
منظورتون از اینکه دو تا Query رو همزمان به اکسس فرستاد چیه؟


یعنی دو درخواست متفاوت از MS-Access در آن واحد داشته باشید.