PDA

View Full Version : مشکل کندی فراخوانی اطلاعات از database



systam
یک شنبه 28 شهریور 1395, 17:03 عصر
سلام
دوستان من تعدادی ایتم در دیتا بیسم که حدود 2000 هزار تا هست
که هر کدوم از ایتم ها شناسه یکتایی براش در نظر گرفته شده
که زمانی شناسه وارد میشه اون ایتم رو برام فراخوانی میکنه و نمایش میده
من به این صورت فراخوانی میکنم اطلاعات رو از دیتا بیس
SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Database1.mdf;Integrated Security=True;Conn" + "ect Timeout=30;User Instance=True");
con.Open();
SqlCommand com = new SqlCommand();
// With...
SqlDataReader reader = com.ExecuteReader;
if ((reader.HasRows == true)) {
reader.Read();
con.CommandText = CommandType.Text;
com.Connection = CommandType.Text;
int code = reader.GetInt32(0);
string name = reader.GetString(1);
int fi = reader.GetInt32(2);
string info = reader.GetString(3);
// ---------------------------------------------------------------
if ((DataGridView1.DataSource == null)) {
dt.Clear();
dt.Columns.Add("---'", typeof(string));
dt.Columns.Add("---'", typeof(int));
dt.Columns.Add("---", typeof(int));
dt.Columns.Add("---", typeof(int));
dt.Columns.Add("---", typeof(int));
ولی مشکلی هست که یکم دیر اطلاعات رو نمایش میده حدود 3 ثاینه طول میشکه برای بار اول به بعد خوب میشه
ایا روشی بهتری هست که اطلاعات رو از دیتا بیس بتونیم سریعتر لود کنیم

mrprestige
یک شنبه 28 شهریور 1395, 21:34 عصر
عرض سلام و وقت بخیر دوست من ، دوست عزیز طبق تعداد داده های که در جدولتون دارید و همینطور طبق این کدی که نوشتی که میاد اول داده ها رو از پایگاهتون میخونه بعد عملیات مورد نظر روش اعمال میشه و این تاخیر اندک طبیعیه و فرمودید از بار اول به بعد خوب میشه این به این خاطره که در واقع عملیت بارگزاری در حافظه Cash ذخیره شده . بنده درخصوص این تاخیری که فرمودید یک پیشنهاد دارم چرا از BackgroundWorker استفاده نمیکنید؟!

systam
یک شنبه 28 شهریور 1395, 21:43 عصر
چی هست تا حالا کار نکردم

Mahmoud.Afrad
یک شنبه 28 شهریور 1395, 21:56 عصر
چرا از دیتاریدر استفاده کردید؟ نمیتونید از دیتاآداپتور استفاده کنید؟

mrprestige
یک شنبه 28 شهریور 1395, 22:20 عصر
ببینید بزارید با یه مثال مشخص کنید فرض کنید شما یک نرم افزار محاسباتی سنگین رو نوشتید و وقتی پروژه تون میخواد بارگزاری بشه پتانسیل اینو داره که با فاجعه ای به نام هنگ کردن رو بهرو بشه یا فرض کنید در پروژه تون چند عملیات رو میخواید به طور همزمان خروجی بگیرید باز در این صورت برنامه هنگ میکنه ، در واقع اینجاست که BackGrounWorker به دادمون میرسه شما با استفاده از این کنترل میتونید همزمان چندین عملیات سنگین رو انجام بدید بدون اینکه نگران این باشید که برنامه مبادا هنگ کنه این کنترل رو هم میتونید به طور کدنویسی ایجادش کنید هم از ToolBox انتخابش کنید ( که بنده روش اول رو ترجیح میدم) حالا برای چی بنده اینو بهتون پیشنها دادم ! . شما میتونید بااستفاده از این کنترل میتونید مدیریت کنید که تو این مدت که طول میکشه پروگرس بار نمایش داده بشه و در عین حال کاربر بتونه به قسمت های دیگه پروژه دسترسی داشته باشه . با استفاده از سه رویداد اصلی 1- DoWork -3 ProgressChange -2 RunWorkerCompleted برنامه نویسی میشه و در انتها با اجرای متد RunWorkerAsync دستور به اجرای BGW میکنی حالا من برای اینکه حجم پست بالا نره و خسته کننده نشه این سایت (http://stackoverflow.com/questions/6481304/how-to-use-a-backgroundworker) و این (https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker_events(v=vs .110).aspx) رو برات گذاشتم ولی اگه سوال برات پیش اومد بپرس اگه ON بودم حتما پاسخ میدم . امیدوارم امیدوارم تا اینجا مطالب برات قابل درک بوده باشه .

پیروز و موفق باشید

systam
یک شنبه 28 شهریور 1395, 22:27 عصر
چرا از دیتاریدر استفاده کردید؟ نمیتونید از دیتاآداپتور استفاده کنید؟
اطلاعاتم در همین حده

Mahmoud.Afrad
دوشنبه 29 شهریور 1395, 00:01 صبح
اطلاعاتم در همین حده

لینک زیر رو ببینید. میتونید از overload دیگر متد fill استفاده کنید و به جای دیتاست، دیتاتیبل به عنوان پارامتر ارسال کنید
https://msdn.microsoft.com/en-us/library/bh8kx08z(v=vs.110).aspx#Anchor_0