PDA

View Full Version : مشکل زمان



behzadk
جمعه 22 تیر 1386, 22:13 عصر
سلام
من یک table دارم تقریبا با 500000 رکورد وقتی من میخوام از table داده با Query استخراج کنم حدود یک دقیقه طول میکشد که به یک error می دهد که در زیر میزارم
و در ضمن cpu من دو هسته ای است و از لحاظ سرعت کامپیوتر مشکلی نیست
و من از oledb استفاده کرده ام

OleDbConnection cn = new OleDbConnection(

"provider=microsoft.jet.OLEDB.4.0;data source=tel.mdb");
OleDbCommand cm = new OleDbCommand("select * from homes", cn);
OleDbDataAdapter dr = new OleDbDataAdapter("select * from homes where family like " + "'%" + textBox1.Text + "'" , cn);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
cn.Open();
dr.Fill(dt);
dataGridView1.DataSource = dt;

لطفا مرا راهنمایی کنید

babi_wd
جمعه 22 تیر 1386, 22:25 عصر
از روش ارائه شده در مقاله زیر استفاده کنید
http://dotnetsource.com/fa/forum/default.aspx?g=posts&t=207

hrshojaei
شنبه 23 تیر 1386, 08:46 صبح
سلام ، با متود OleDbCommand.CommandTimeout می تونی زمان Timeout رو افزایش بدی . Timeout زمانی است که VS صبر می کنه تا از DB جواب بگیره . اگه توی این زمان جواب نیاد پیغام خطا میده . به طور پیش فرض این زمان 30 ثانیه است .
امیدوارم این مشکلتو حل کنه . موفق باشید .

mehdi.mousavi
یک شنبه 24 تیر 1386, 10:40 صبح
سلام
من یک table دارم تقریبا با 500000 رکورد وقتی من میخوام از table داده با Query استخراج کنم حدود یک دقیقه طول میکشد که به یک error می دهد که در زیر میزارم
و در ضمن cpu من دو هسته ای است و از لحاظ سرعت کامپیوتر مشکلی نیست
و من از oledb استفاده کرده ام

OleDbConnection cn = new OleDbConnection(

"provider=microsoft.jet.OLEDB.4.0;data source=tel.mdb");
OleDbCommand cm = new OleDbCommand("select * from homes", cn);
OleDbDataAdapter dr = new OleDbDataAdapter("select * from homes where family like " + "'%" + textBox1.Text + "'" , cn);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
cn.Open();
dr.Fill(dt);
dataGridView1.DataSource = dt;

لطفا مرا راهنمایی کنید


سلام.
اونطوری که از SQL کد فوق معلومه، شما دارید دنبال رکوردهایی می گردید که با کلمه خاصی پایان پذیرفته باشن. چون از LIKE استفاده می کنید، مدت زمان جستجو زیاد هست. شما باید از Full Text Search استفاده کنید، به این ترتیب سرعت جستجو بهبود پیدا میکنه.

behzadk
یک شنبه 24 تیر 1386, 19:51 عصر
سلام
تشکر از راهنمایی شما
میشه یه کم بیشتر توضیح بدین
با تشکر

linux
یک شنبه 24 تیر 1386, 21:26 عصر
سلام
من یک table دارم تقریبا با 500000 رکورد وقتی من میخوام از table داده با Query استخراج کنم حدود یک دقیقه طول میکشد که به یک error می دهد که در زیر میزارم
و در ضمن cpu من دو هسته ای است و از لحاظ سرعت کامپیوتر مشکلی نیست
و من از oledb استفاده کرده ام

OleDbConnection cn = new OleDbConnection(


"provider=microsoft.jet.OLEDB.4.0;data source=tel.mdb");
OleDbCommand cm = new OleDbCommand("select * from homes", cn);
OleDbDataAdapter dr = new OleDbDataAdapter("select * from homes where family like " + "'%" + textBox1.Text + "'" , cn);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
cn.Open();
dr.Fill(dt);
dataGridView1.DataSource = dt;

لطفا مرا راهنمایی کنید
1 - خوب این oledbcommand cm بنظر می رسد که اضافه هست
2 - روی فیلد فامیلی توی دیتابیس ایندکس حتما بگذارید.
3- چرا علامت درصد را قبل از اسم گذاشتید این یعنی مثلا دنبال اسامی بگرد که انتهاش به یک حرف یا کلمه ختم میشه. معمولا بر عکس این را انجام می دهند


SELECT * FROM homes WHERE family LIKE N+"'"+textbox1.text +"%'"

این کد بالا را امتحان کنید

ARA
دوشنبه 25 تیر 1386, 10:01 صبح
به نظر من یکم رو ساختار database کار کن
شاید بتونی یک کم قواعد نرمال سازی رو توش پیدا کنی تا بتونی جدولت رو بشکنی

جدولی با 500هزار رکورد خیلی خطرناک حسن D: