PDA

View Full Version : سوال: فرق سرعت در sql و C#



omidamiry
پنج شنبه 26 اردیبهشت 1392, 21:51 عصر
با سلام

تو سی شارپ با استفاده از کد sql کل جدول دارای 12 فیلد را select میکنم و زمان زیادی طول نمیکشه

ولی زمانی که به دیتا گرید انتصاب میدهم سه برابر sql زمان میبره راه حل بهتری وجود داره ؟




DataView dv = new DataView();

dataGridView1.DataSource = dv;



dv حاوی جدول خروجی از sql می باشد

باتشکر ازهمه

esafb52
پنج شنبه 26 اردیبهشت 1392, 22:29 عصر
خب دوست چرا این کار رو انجام میدی همون تیبل رو مستقیم منبع داده دیتاگرید قرار بده

FastCode
یک شنبه 29 اردیبهشت 1392, 11:53 صبح
جست و جو کنید:
DataGridView.VirtualMode

زمان صفر میشه

morteza271
یک شنبه 29 اردیبهشت 1392, 12:02 عصر
جست و جو کنید:
DataGridView.VirtualMode

زمان صفر میشه
سلام دوست عزیز.
امکانش هست در مورد این نکته ای که گفتین بیشتر توضیح بدین و بگین که کلا چیکار میکنه؟
همچنین اگه امکانش هست یه نمونه کد بذارین...
با تشکر...

FastCode
یک شنبه 29 اردیبهشت 1392, 13:16 عصر
DataGridView.VirtualMode
برای استفاده از grid در این حالت باید VirtualMode رو true کنید.
تعداد سطر ها رو به شکل دستی وارد کنید و برای نمایش و تغییر اطلاعات event های CellValueNeeded و CellValuePushed رو استفاده کنید.
نمونه کامل با insert و Delete:
http://msdn.microsoft.com/en-us/library/2b177d6d.aspx
این هم یک نمونه خیلی ساده بدون Edit و با Paging(به قسمت paging توجه نکنید چون خیلی بد نوشته.البته ممکنه راه حل خوبی برای افزایش سرعت OP در قسمت sql باشه)
http://stackoverflow.com/questions/10512981/datagridview-virtual-mode-with-a-simple-list-as-a-source

لطفا عنوان تاپیک رو دقیق بنویسید.این عنوان معنی ای جز مقایسه سرعت انجام query در سمت client یا server نداره.
عنوان مناسب:سرعت کم Datagridview در لود کردن اطلاعات

youngold
یک شنبه 29 اردیبهشت 1392, 14:04 عصر
سلام دوست عزیز.
امکانش هست در مورد این نکته ای که گفتین بیشتر توضیح بدین و بگین که کلا چیکار میکنه؟
همچنین اگه امکانش هست یه نمونه کد بذارین...
با تشکر...

در این روش تنها قسمت هایی که تغییر کردند در گرید دوباره رسم میشند نه همش ، از اونجایی که زمان طولانی لود اطلاعات حجیم در گرید مربوط به همین موضوع هست باعث تغییرات سریع در اطلاعات گرید میشه
و این موضوع هم هیچ ارتباطی به پایگاه داده نداره!

FastCode
یک شنبه 29 اردیبهشت 1392, 14:08 عصر
در این روش تنها قسمت هایی که تغییر کردند در گرید دوباره رسم میشند نه همش ، از اونجایی که زمان طولانی لود اطلاعات حجیم در گرید مربوط به همین موضوع هست باعث تغییرات سریع در اطلاعات گرید میشه
و این موضوع هم هیچ ارتباطی به پایگاه داده نداره!
و نوشته شما هم هیچ ربطی به VirtualMode نداشت.
چیزی که شما میگی اینه:

void Notify_Add(object sender, RowAddEventArgs<T> e)
{
lock (sync)
{
if (!rows.Contains(e.Instance) && (predicate == null || predicate(e.Instance)))
{
rows = ArrayHelper.Add(ref rows, e.Instance, comparer);
dataGridView.RowCount++;
dataGridView.Update();
}
}
}
void Notify_Edit(object sender, RowEditEventArgs<T> e)
{
lock (sync)
{
bool After = (predicate == null || predicate(e.Instance));
int Index = Array.IndexOf(rows, e.Instance);
bool Before = Index != -1;
if ((!After) && Before)
{
rows = ArrayHelper.Remove<T>(ref rows, Index);
dataGridView.RowCount--;
dataGridView.Update();
}
if ((!Before) && After)
{
rows = ArrayHelper.Add(ref rows, e.Instance, comparer);
dataGridView.RowCount++;
dataGridView.Update();
}
if (After && Before)
{
for (int n = 0; n != dataGridView.ColumnCount; n++)
{
dataGridView.UpdateCellValue(n, Index);
}
}
}
}
void Notify_Delete(object sender, RowDeleteEventArgs<T> e)
{
lock (sync)
if (rows.Contains(e.Instance) && (predicate == null || predicate(e.Instance)))
{
rows = ArrayHelper.Remove(ref rows, e.Instance);
dataGridView.RowCount--;
dataGridView.Update();
}
}
این نمونه کد خیلی سادست.
در Notify_* باید بعد از حذف یا اضافه کردن سطر, سطر حذف/اضافه شده و سطرهای بعدیش Update بشن.چون خیلی شلوغ میشد اون بخش کد رو حذف کردم.

مهدی هادیان2
یک شنبه 29 اردیبهشت 1392, 14:12 عصر
بسم الله الرحمن الرحیم

جست و جو کنید:
DataGridView.VirtualMode

زمان صفر میشه
با سلام
می توان به جای این از Pagging استفاده کرد؟ یا 2 مقوله جداست؟
با سپاس

youngold
یک شنبه 29 اردیبهشت 1392, 14:15 عصر
و نوشته شما هم هیچ ربطی به DataGridView نداشت

دوست عزیز
شاید. به طور کلی گفتم
در گرید هایی دیگه هم که ببینید مثل گرید های telerik components و ... چنین تکنیک هایی برای نمایش های سنگین گرید در نظر گفته شده

FastCode
یک شنبه 29 اردیبهشت 1392, 14:17 عصر
بسم الله الرحمن الرحیم

با سلام
می توان به جای این از Pagging استفاده کرد؟ یا 2 مقوله جداست؟
با سپاس
paging میتونه سرعتتون رو زیاد کنه ولی به هم ربطی ندارن.

@youngold:پست قبلی رو ویرایش کردم.ببینید.