PDA

View Full Version : گفتگو: بررسی یک مشکل از datatable



user18
چهارشنبه 02 اسفند 1391, 13:30 عصر
با سلام من قبلا از یکی یه چیزی شنیدم اینجا این قضیه رو بیان میکنم تا با کمک دوستان بررسیش کنیم و راهکار براش ارائه بدیم
فرض کنید ما یه جدول داریم تو یک بانک اطلاعاتی و مثلا دفترچه تلفن
خوب میاییم با یه دستور select تمام رکوردهای این جدول رو فراخونی میکنیم و میریزیم تو یه دیتاتیبل تو سی شارپ و بعد هم انقیادش میدیم به دیتاگرید خوب تااینجا ظاهرا همه چیز درسته و مشکلی نیست
اما مشکل اصلی زمانی هست که تعداد رکوردها افزایش می یابد قبول دارید که دیتاتیبل یه فضایی هست تو رم کامپیوتر ما
فرض کنید تعداد رکوردها به اعداد نجومی رسید مثلا صد میلیون چه میدونم اعداد خیلی بالاتر یکی می گفت تو همچین مواقعی دیتاتیبل جواب نمیده چه راه حلی برای نمایش تمام رکوردها سراغ دارین که این مشکل براش پیش نیاد با تشکر

youngold
چهارشنبه 02 اسفند 1391, 14:17 عصر
دوست عزیز شما که با ابر کامپیوتر ها کار نمیکنی
به هر حال در چنین تعدد هایی به قول خودتون نجومی باید به فکر فضایی که از رم اشغال میکنید باشید
منطقی نیست همه این اطلاعات رو یک جا نمایش بدید
در query string که select میکنید باید از کلمه کلیدی limit استفاده کنید و در هر بار نمایش بازه محدودی از اطلاعاتتون رو نمایش بدید
بهتره چنین حجم داده ای رو یک جا از دیتابیس تو حافظه نکشید اونهم برای نمایش در grid view، اما میشه اطلاعات رو در چند data table تقسیم کرد
باز هم میگم باید ببینید دات نت روی سیستم شما چقدر حد مجاز دسترسی به حاظفه رم رو میده
از طرفی گرید ویو ها هم محدودیت نمایش دارند و سنگین میشند
نکنه شما میخواید اون همه اطلاعات رو وارد data table کنید تا توش به جستجو و تجزیه تحلیل بپردازین؟! در این صورت باید بگم نه تنها آوردن اطلاعات به حافظه کارتون رو بهینه نمیکنه بلکه یک بار اضافیه، بهتره فقط هر چی لازم دارید رو از دیتابیس بگیرید

RED-C0DE
چهارشنبه 02 اسفند 1391, 19:07 عصر
بهتره اینجور وقتا فکری برای سیاست کاریتون بکنین.
نمایش حجم زیادی از اطلاعات (در بیشتر برنامه ها) اصلا کار جالبی نیست! 1،000،000 رکورد در یک گرید!!! کاربر چجوری می خواد اونها رو ببینه؟! چجوری می خواد اسکرول کنه رو اونا!!! جدا از این ، این حجم اطلاعات علاوه بر اینکه سمت حافظه ی کلاینت ممکنه باعث کند شدن بیش از حد و پر شدن حافظه و در نهایت کرش کردن برنامه بعلت کمبود حافظه بشه، اگه برنامه بصورت شبکه و چند کاربره هم باشه، هزینه ی فراهم کردن خروجی این کوئری و انتقال اطلاعات از سرور ب کلاینتها هم خیلی عذاب آوره.
بهتره فکر دیگه ای کنید.

برای مثال می تونید صفحه بندی کنید اطلاعات رو
یا با یک تقریب مناسب، حجم مناسبی از اطلاعات رو نمایش بدید سمت کاربر . از قابلیت Virtual در DataGridView کمک بگیرید.
و چندین راه و تکنیک دیگه ک تو همین فروم هم بحث شده، جستجو کنید پیدا می کنید

user18
پنج شنبه 03 اسفند 1391, 00:08 صبح
منم با نظر شما موافقم که نمایش تمام اطلاعات حجم بالا کار معقولی نیست ولی مشتری که این چیزها تو کتش نمیره میخواد این فرایند وجود داشته باشه هرچی هم بهش بگیم نمایش مثلا 1 میلیون رکورد در گرید عقلانی و به صرفه برای کاربر و راحتی کار اون با برنامه نیست فکر میکنه ما میخواهیم از کار کم بزاریم پیشنهاد صفحه بندی کار جالبی هست و پیشنهاد استفاده از چند دیتاتیبل هم جالب هست اگر راهکاراشو کسی بلده پیشنهاد بده خوشحال میشم و اگر نظر دیگری سایر دوستان دارند راهکاری ارائه بدن خوب میشه به هر حال این یه مشکل هست بین برنامه نویسان و متقاعد کردن کاربر کار سختی هست