PDA

View Full Version : چند راهنمایی درمورد ADO.NET لطفا



vbadvanced
جمعه 15 اردیبهشت 1385, 11:56 صبح
سلام دوستان
دستور Fill برای جداولی که دارای تعداد رکوردهای زیاد هستند زمان زیادی طول میکشه.:گریه:
من برای حدود یک میلیون رکورد امتحان کردم نزدیک به 10-12 دقیقه روی سیستم 2600 من طول کشید. :گیج:
البته تعداد رکوردهای واقعی برنامه من خیلی کمتر از اینه. اما به هر حال باز هم مشکل ایجاد میکنه. دوستان اگه راهنمایی یا روش سریعتری برای کار با داده ها دارند کمک کنند بسیار ممنون میشم.:قلب: :قلب:

Shabani.Mojtaba
جمعه 15 اردیبهشت 1385, 23:25 عصر
خوب عزیز من مجبور نیستی همه رو fill بکنی

vbadvanced
شنبه 16 اردیبهشت 1385, 00:40 صبح
بله. این دقیقا همون کاریه که من هم انجام دادم. اما در مورادی آدم به کل اطلاعات جدولش نیاز داره. توی ADO و DAO چنین مشکلی(اگه بشه گفت مشکل) وجود نداره. به راحتی چندیدن میلیون رکورد رو در کسری از ثانیه میشه لود و سرچ کرد.
به هر حال مسلما طراحای ADO.NET اونو فقط برای جداول چندصد رکوردی نساختن.:متفکر:
من منتظر راهنماییهای بقیه دوستان هم هستم.

linux
شنبه 16 اردیبهشت 1385, 15:32 عصر
خوب!
من تو همین یک مورد مشکل داشتم! چرا در ado.net فقط disconnected میشه کار کرد؟
اما در مورد مشکل شما یک روش هست
Querying Large Result Sets Asynchronously
برات حتما مثال میگذارم

vbadvanced
شنبه 16 اردیبهشت 1385, 20:18 عصر
ممنون میشم اگه این لطفو بفرمایید.
اگه درست منظورتونو فهمیده باشم یعنی اینکه عملیات Fill کردن دیتاست رو در بکگراند انجام بدیم. اگر هم اشتباه میکنم که لطفا بفرمایید.
ممنون از وقتی که میزارید.

linux
شنبه 16 اردیبهشت 1385, 21:07 عصر
این هم مثال که قول دادم کانکشن استرینگ را درست ست کنید و sqlcomand را هم تنظیم کنید.
بعدش هم لطف کنید بگید چقدر زمان طول کشید؟ تا آن یک میلیون رکورد لود شود

linux
شنبه 16 اردیبهشت 1385, 21:13 عصر
این هم مثال

vbadvanced
یک شنبه 17 اردیبهشت 1385, 00:40 صبح
ممنون آقای Linux عزیز.
متاسفانه بنده از oledb و بانک اکسس استفاده می کنم. متد BeginExecuteReader رو نتونستم به معادل Oledb اون تبدیل کنم.
لطفا راهنمایی بفرمایید. بسیار سپاسگزارم.

M.kavyani
دوشنبه 18 اردیبهشت 1385, 16:27 عصر
بله. این دقیقا همون کاریه که من هم انجام دادم. اما در مورادی آدم به کل اطلاعات جدولش نیاز داره. توی ADO و DAO چنین مشکلی(اگه بشه گفت مشکل) وجود نداره. به راحتی چندیدن میلیون رکورد رو در کسری از ثانیه میشه لود و سرچ کرد.
به هر حال مسلما طراحای ADO.NET اونو فقط برای جداول چندصد رکوردی نساختن.:متفکر:
من منتظر راهنماییهای بقیه دوستان هم هستم.
با سلام
من چند 10 میلیون رکورد در SQL ساختم و بعد از اینکه به SQL رجوع کردم برای دیدن اینکه چع تعداد رکورد ایجاد شده است دیدم که برای نمایش دادن رکورد ها زمان زیادی رو از من گرفت . این مشکل درون خود SQL بود.
حالا مطمئنا" Load کردن اینها زمان زیادی رو میگیرد.
سرچ کردن هم که اگر بیش از حد طولانی بشه باید نگاه کرد مشکل از کجاست!!
برای من به شدت سوال شده که چرا شما میخواهید همه رکورد ها را نمایش بدهید . کاربر داخل این تعداد رکورد سر در گم خواهد شد. شما باید مقداری رو که کاربر میخواهد نمایش بدهید( البته من اینگونه فکر میکنم. در شرایط شما شاید وضعیت فرق کند).
در پناه حق موفق و کامروا باشید

linux
دوشنبه 18 اردیبهشت 1385, 17:46 عصر
با سلام
من چند 10 میلیون رکورد در SQL ساختم و بعد از اینکه به SQL رجوع کردم برای دیدن اینکه چع تعداد رکورد ایجاد شده است دیدم که برای نمایش دادن رکورد ها زمان زیادی رو از من گرفت . این مشکل درون خود SQL بود.
حالا مطمئنا" Load کردن اینها زمان زیادی رو میگیرد.
سرچ کردن هم که اگر بیش از حد طولانی بشه باید نگاه کرد مشکل از کجاست!!
برای من به شدت سوال شده که چرا شما میخواهید همه رکورد ها را نمایش بدهید . کاربر داخل این تعداد رکورد سر در گم خواهد شد. شما باید مقداری رو که کاربر میخواهد نمایش بدهید( البته من اینگونه فکر میکنم. در شرایط شما شاید وضعیت فرق کند).
در پناه حق موفق و کامروا باشید
مطلبی که شما می گویید درست هست کاربر باید با رکوردهای مورد نیاز کارکند.و الا دیدن این همه رکورد تو دیتاگرید کار بی جهتی هست.ولی این راه حل هم هست.

vbadvanced
دوشنبه 18 اردیبهشت 1385, 19:52 عصر
من هم با هر دوی شما دوستان موافقم. اما من برای نمایش لیست اطلاعات فیلتر گذاشتم. تعداد رکوردهایی که همزمان در گرید نمایش داده میشن کاملا به اختیار خود کاربر هست. تنها مشکل من همون Fill کردن DataTable هست.
آقای لینوکس عزیز مثال شما کارساز بود. زمان لود کامل نزدیک به 1 دقیقه و 27 ثانیه برای یک میلیون و صد و پنجاه هزار رکورد شد. اما متاسفانه برای OLEDB نتونستم معادلشو انجام بدم.
هنوز منتظر راهنماییتون هستم.
ممنون از وقتی که میزارید.

linux
دوشنبه 18 اردیبهشت 1385, 20:55 عصر
راستش من این مثال را از کتاب ado.net2 در آوردم در مورد oledb که چیزی نگفته!

vbadvanced
سه شنبه 19 اردیبهشت 1385, 00:44 صبح
:گریه: :گریه:

vbadvanced
سه شنبه 19 اردیبهشت 1385, 00:52 صبح
لطفا دوستان دیگه اگه اطلاعاتی دارن کمک کنند. ممنون میشم.

rezaei manesh
سه شنبه 26 دی 1385, 17:21 عصر
من این مثال رو با 2میلیون و 250 هزار رکورد چک کردم که لود شد اما نه کامل یه جورایی رفت رو هنگ من چند دقیقه موندم اما نشد
و همونو با دیتاست پرکردم که اصلا به کل تعطیل شد

ali_kolahdoozan
سه شنبه 26 دی 1385, 19:05 عصر
یکبار هم datareader رو تست کنید که fill نخواهد . ببینید چی میشه . فقط لطفا نتیجه رو بگید . یا دیتابیستون رو بفرستید چون هم همچین دیتا بیس خفنی در دسترس ندارم

rezaei manesh
سه شنبه 26 دی 1385, 19:28 عصر
آقا من هم همچین دیتابیسی رو نداشتم خودم ساختم یک اسکریپت بنویس که هر چندتا که می خوای واست درست کنه من این تعداد رو در 15 دقیقه درست کردم .

ali_kolahdoozan
سه شنبه 26 دی 1385, 20:12 عصر
آره یه حلقه بسشه . اما با دیتا ریدر تا حدودی بهتره اگه تست کنید میبینید

komail_sh
چهارشنبه 27 دی 1385, 09:20 صبح
برای سرعت بالا میتونی از ajax استفاده کنی.
توی همین سایت سرچ کن مطالب زیادی هست

titbasoft
چهارشنبه 27 دی 1385, 17:35 عصر
چرا عملیات فیلتر کردن اطلاعات رو سمت سرور (دیتابیس) انجام نمی دید؟ مثلا چرا یک Stored Procedure نمی نویسید که با استفاده از یکسری پارامتر ورودی اطلاعات محدودی رو برگردونه. اگر هم تعداد رکورد ها زیاد بود اطلاعاتتون رو صفحه بندی کنید. ضمنا من نمی دونم چرا اصرار روی Access دارید؟ معماری نحوه ذخیره سازی اطلاعات در فایل های Access برای کار با حجم بالای اطلاعات پاسخ گو نخواهد بود، گرچه که یک ملیون رکورد اطلاعات چندان زیادی در مقایسه با توانایی های پردازش SQL Server روی داده های ترابایتی نیست. SQL Server 2005 امکانات بسیار مناسبی برای این کار داره. البته باز هم تاکید می کنم، فکر می کنم مشکل اصلی الان حجم بالای انتقال اطلاعات از دیتاسرور بر روی کلاینته، نه قدرت بازیابی دیتابیس.

ضمنا در ADO.Net از هر دو روش Connected و Disconnected می شه سرویس گرفت.