PDA

View Full Version : کند بودن سرعت اتصال به دیتا گرید



mahdad sepah
دوشنبه 27 تیر 1390, 20:04 عصر
سلام خدمت دوستان واساتید عزیز
من یه مدتی در یک شرکت کارآموز بودم در انجا برنامه هایشان در vb6نوشته شده بود قرار شد ما برنامه هایشان را بیاریم در سی شارپ وقتی اولین فرم را طراحی کردیم متوجه اختلاف فاحشی شدیم در سرعت انتقال اطلاعات در دیتا گرید ویو
اون موقع داشتیم با ADO.netاین کار را انجام می دادیم گفتیم شاید به خاطر اونه حالا جدیدا داریم با linq کار میکنیم بازم وقتی وقتی دکمه ثبت را می زنیم با یه مکثی اطلاعات وارد دیتاگرید میشه!!می خوام بدونم مشکل از کد نویسی منه یا چیز دیگه ای است؟؟؟؟؟؟؟؟؟؟؟

کسی می دونه اگه بخواهم فقط آخرین رکورد در گرید نمایش داده شود چه جوری است؟منظورم این است که که بعد از هر insert یا update کل گرید لود نشود

mahdad sepah
دوشنبه 27 تیر 1390, 22:33 عصر
دوستان شدیدا به همفکریتان نیازمندم:چشمک:

shervinrv
سه شنبه 28 تیر 1390, 07:22 صبح
دوست عزیز شاید برنامه ای که نوشتی نسبتا سنگینه
مثلا خودم یه برنامه دارم برای تهیه گزارش تو یکی از قسمتا تقریبا40-50 ثانیه طول میکشه تا پر بشه

در مورد سوال دومتون درست متوجه نشدم
ینی دیتاگرید ویو یه سری اطلاعات توش داره وقتی یه ردیف جدید ثبت میکنی میخوای قبلی ها پاک بشه و فقط ردیف جدید رو نشون بده ؟
اگه منظورت اینه تو VB.NET که اینجوریه
DATAGRIDVIEW1.Items.CLEAR
توی C# هم یه چیز تو همین مایه ها باید باشه
اینو قبل از دستور پر کردن دیتاگریدت بزار
قبلی ها پاک میشه

mahdad sepah
سه شنبه 28 تیر 1390, 09:12 صبح
دوست عزیز شاید برنامه ای که نوشتی نسبتا سنگینه
مثلا خودم یه برنامه دارم برای تهیه گزارش تو یکی از قسمتا تقریبا40-50 ثانیه طول میکشه تا پر بشه

در مورد سوال دومتون درست متوجه نشدم
ینی دیتاگرید ویو یه سری اطلاعات توش داره وقتی یه ردیف جدید ثبت میکنی میخوای قبلی ها پاک بشه و فقط ردیف جدید رو نشون بده ؟
اگه منظورت اینه تو VB.NET که اینجوریه
DATAGRIDVIEW1.Items.CLEAR
توی C# هم یه چیز تو همین مایه ها باید باشه
اینو قبل از دستور پر کردن دیتاگریدت بزار
قبلی ها پاک میشه
نه دوست عزیز منظورم اینه که اطلاعات دیتا گرید دوباره لود نشه فقط همون اطلاعاتی که وارد کردم وارد بشه نه کل گرید لود بشه همین فک میکنم باعث کندیه برنامه است
اتفاق برنامه ام وقتی یک فرم هم داره فرقی نداره اطلاعات با یه مکثی وارد گرید میشه

mahdad sepah
چهارشنبه 29 تیر 1390, 14:59 عصر
دوستان یکی کمک کنه خواهشا:گریه:

Rejnev
چهارشنبه 29 تیر 1390, 15:18 عصر
روی چند تا رکورد کندی رو میبینید؟
گرید تا ده ها هزار رکورد رو در کسری از ثانیه نمایش میده
مشکل از جای دیگه ایه
مثلا اگه عکس توی ستونها داشته باشین
یا ستونها رو تغییر اندازه بدین شدیدا کند میشه.
اگه بخوای به روشی که خودت گفتی عمل کنی، دیگه نباید گرید بایند بشه، بلکه باید گرید رو دستی پر کنی و ردیف به ردیف بهش اضافه کنی. که این هم خودش سرعتش نصبت به بایندینگ کم تره.
اولا بگو چطوری و با چه کدی گرید رو پر میکنی،
دوما توی تنظیمات گرید، مقدار autosizeColumntMode روی چی هست؟

mahdad sepah
چهارشنبه 29 تیر 1390, 15:25 عصر
روی چند تا رکورد کندی رو میبینید؟
گرید تا ده ها هزار رکورد رو در کسری از ثانیه نمایش میده
مشکل از جای دیگه ایه
مثلا اگه عکس توی ستونها داشته باشین
یا ستونها رو تغییر اندازه بدین شدیدا کند میشه.
اگه بخوای به روشی که خودت گفتی عمل کنی، دیگه نباید گرید بایند بشه، بلکه باید گرید رو دستی پر کنی و ردیف به ردیف بهش اضافه کنی. که این هم خودش سرعتش نصبت به بایندینگ کم تره.
اولا بگو چطوری و با چه کدی گرید رو پر میکنی،
دوما توی تنظیمات گرید، مقدار autosizeColumntMode روی چی هست؟



DataClasses1DataContext db = new DataClasses1DataContext();

db.tbl_forooshes.InsertOnSubmit(

new tbl_foroosh { NameJens = textBox1.Text, price = int.Parse(textBox2.Text), tedad = int.Parse(textBox3.Text), code = int.Parse(textBox4.Text), date = textBox6.Text ,forooshande=comboBox1.Text});

db.SubmitChanges();

dataGridView2.DataSource = db.tbl_forooshes;

mahdad sepah
چهارشنبه 29 تیر 1390, 15:28 عصر
مقدار autosizeColumntMode روی none است

Rejnev
چهارشنبه 29 تیر 1390, 15:51 عصر
خب، جالب شد،
ظاهرا علت کندی چیز دیگه ایه.
1- تعداد رکوردها رو نگفتید.
2-آیا روی شبکه کار میکنید؟
قبل از دستور سابمیت که شی جدید رو ساختین و آماده درجه، یک Environment.TickCount بگیرید، و سپس، بعد از Submit و در نهایت بعد از مقدار دهی به گرید هم این کار رو بکنید.
بعد اون اعداد رو از هم کم کنید ببینید واقعا گرید کنده یا دستور درج.
نتیجه رو اینجا بذارید.

mahdad sepah
چهارشنبه 29 تیر 1390, 16:20 عصر
چه جوری Environment.TickCount قرار بدم؟ ارور میده
طرز قرار دادنش را به صورت کد بی زحمت قرار می دین؟

Rejnev
چهارشنبه 29 تیر 1390, 17:04 عصر
int a=Environment.TickCount;
db.SubmitChanges();
int b=Environment.TickCount;
dataGridView2.DataSource = db.tbl_forooshes;
int c=Environment.TickCount;
//
MessageBox.Show(string.Format("insert={0} and show in datagrid={1}",b-a,c-b));

اگه خطا میده باید فضای نمونه مورد نیاز رو اضافه کنید. فکر میکنم فضای نام system باشه.

mahdad sepah
چهارشنبه 29 تیر 1390, 17:25 عصر
int a=Environment.TickCount;
db.SubmitChanges();
int b=Environment.TickCount;
dataGridView2.DataSource = db.tbl_forooshes;
int c=Environment.TickCount;
//
MessageBox.Show(string.Format("insert={0} and show in datagrid={1}",b-a,c-b));

اگه خطا میده باید فضای نمونه مورد نیاز رو اضافه کنید. فکر میکنم فضای نام system باشه.

show datagrid=78

insert=141
خوبه یا بد؟

Rejnev
چهارشنبه 29 تیر 1390, 17:41 عصر
خوبه دیگه!...
این یعنی کمتر از یک دهم ثانیه گرید زمان میگیره.
در مجموع حدود دویست میلی ثانیه طول میکشه.
الان کندی کار چیه پس؟

mahdad sepah
چهارشنبه 29 تیر 1390, 23:50 عصر
آخه من یه برنامه تو vb6 دیدم تا دکمه ثبت را میزدم بلا فاصله وارد گرید میشد من دارم با اون مقایسه می کنم واسه من یه مکث داره بعد وارد میشه
ازتون ممنونم که وقت گذاشتید

Rejnev
پنج شنبه 30 تیر 1390, 09:46 صبح
چند تا عامل باعث میشه که یکم برنامه های دات نتی کند تر باشن...
یکیش رابط کاربری پیشرفته تره.
دیگه میتونه اجرا به واسطه دات نت فریم ورک باشه.
استفاده از LINQ to SQL هم کمی روی سرعت تاثیر میذاره نسبت به زمانی که خودتون مستقیم داده ای رو درج یا ویرایش میکنید.