PDA

View Full Version : سوال: مشکل در سرعت بانک



amir4015
شنبه 11 شهریور 1391, 21:40 عصر
با سلام
من یک نرم افزار محاسباتی برای یک اموزشگاه نوشتم
به این صورت که مجموع پول پرداختی رو با کل شهریه و مبلغ هر جلسه مقایسه می کنه بعد مشخص می کنه که چه جلساتی رو می تونه شرکت کنه به این صورت اگر که ما گزارش جلسه چهار رو بخوایم مقایسه می کنه و به افرادی که بدهکارن مقدار دو را اختصاص می ده
اما مشکل اینجاست الان که تعداد 80 نفر حدود دو دقیقه طول می کشه و تعدادی از کاربرارو اصلا بررسی نمی کنه و تعدادی را هم جواب اشتبا می ده
اما زمانی که کم بود مثلا 5 نفر نرف افزار درست کار می کرد.
ممنون می شم اگه راهنمایی کنید
(بانک اکسسز)

com11 = new OleDbCommand("update table1 set bedehcar=@p2 where id=@p0", con);
com11.CommandType = CommandType.Text;
// con.Open();
//*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
int aaa = 1;
if (x <= xx)
{
textBox26.Text = (x).ToString();

jj = Convert.ToInt32(ds2.Tables["table1"].Rows[(x - 1)]["colesha"]);
kk = Convert.ToInt32(ds2.Tables["table1"].Rows[(x - 1)]["tedadazmoon"]);
ll = Convert.ToInt32(ds2.Tables["table1"].Rows[(x - 1)]["mandeh"]);
ff = jj / kk;
for (int y = 1; y <= (comboBox3.SelectedIndex + 1); y++)
{
if (ds2.Tables["table1"].Rows[(x - 1)]["sh" + (y)].ToString() == "1")
{
hzf[aaa - 1] = "sh" + y;
aaa++;
}
}
for (int yy = 1; yy <= (comboBox3.SelectedIndex + 1); yy++)
{
if (hzf[yy - 1] == "sh" + (comboBox3.SelectedIndex + 1))
{
ww = yy;
}
}
if (ds2.Tables["table1"].Rows[(x - 1)]["sh" + (comboBox3.SelectedIndex + 1)].ToString() == "2")
{
// textBox26.Text = x.ToString();
com11.Parameters.AddWithValue("@p2", textBox11.Text.Trim());
com11.Parameters.AddWithValue("@p0", textBox26.Text.Trim());

}
else
{
// textBox26.Text = x.ToString();
if (ll <= ww * ff)
{
com11.Parameters.AddWithValue("@p2", textBox11.Text.Trim());
com11.Parameters.AddWithValue("@p0", textBox26.Text.Trim());

}
com11.Parameters.AddWithValue("@p2", textBox29.Text.Trim());
com11.Parameters.AddWithValue("@p0", textBox26.Text.Trim());


}
con.Open();
com11.ExecuteNonQuery();
con.Close();
x++;
}
else
{
con.Close();
//./././././././././././././././././
OleDbConnection amir1 = new OleDbConnection(strcon4);
OleDbDataAdapter ali1 = new OleDbDataAdapter("select meli, name, family, pedar, tamas, mobail, tedadazmoon, rabet, colesha, mandeh from table1 where bedehcar=" + textBox27.Text.Trim() + " order by id asc", amir1);
amir1.Open();
System.Data.DataTable reza1 = new System.Data.DataTable();
// ds = new DataSet();
// System.Data.DataTable tbl = ds.Tables.Add("table1");
// ali1.Fill(ds, "table1");
ali1.Fill(reza1);
dataGridView2.DataSource = reza1;
amir1.Close();
timer13.Enabled = false;

}

NasrEsk
شنبه 11 شهریور 1391, 22:24 عصر
نباید خیلی طول بکشه.
احتملا یه کار دیگه کردی باید ساختار برنامه رو نگاه کنی

amir4015
شنبه 11 شهریور 1391, 22:28 عصر
نه کد همینه
از جدول می گیره بعد از محاسبه ذوباره مقدار دو یا یک رو بر می گردونه
در ضمن علاوه بر سرعت نرم افزار تعدادی از کاربرارو اصلا بررسی نمی کنه و تعدادی را هم جواب اشتبا می ده با حالی که کد برا همه یکی هست

m0hammad_01
شنبه 11 شهریور 1391, 23:20 عصر
سلام.
کد رو دیدم.به نظر نباید مشکلی داشته باشه.
اگه مطمئنی این تمام کد عملیاتیه که میگی کند انجام میشه یا مشکل داره، به نظرم با گذاشتن Braeck Point تو جاها مختلف کدت (مثلا اونجاهایی که عملیات محاسباتی داره یا داره کوئری اجرا میکنه و هر جایی که بهش شک داری) مرحله به مرحله بررسی کن.خیلی راحت می فهمی کجا کند کار میکنه کجا نه.
وقتی BraekPont گذاشتی، متغیرهات و هم بزار تو قسمت Watch که قشنگ مانیتور کنی که اگه مقداری بر نگشت بفهمی چرا برا بعضی را رو حساب نمی کنه و جواب نمیده.

amir4015
شنبه 11 شهریور 1391, 23:39 عصر
نه دوست عزیز
این که درمان نیست

m0hammad_01
شنبه 11 شهریور 1391, 23:47 عصر
من خیلی وقته با زبان های برنامه نویسی آشنام.از gwbasic شروع کردم.تقریبا تمام مشکلاتی که تو کد باشه رو میشه با Trace کردن استخراج کرد.
علم و تجربه این رو میگه!
حالا ببینیم بقیه دوستان چی میگن.

amir4015
شنبه 11 شهریور 1391, 23:58 عصر
ممنون كه جواب مي ديد

amir4015
یک شنبه 12 شهریور 1391, 00:03 صبح
بجز سرعتش تعدادی از کاربرارو اصلا بررسی نمی کنه و تعدادی را هم جواب اشتبا می ده كه فكر كنم اين به خاطر سرعت و هنگ كردن باشه كه دليلشو نمي دونم

m0hammad_01
یک شنبه 12 شهریور 1391, 00:19 صبح
بجز سرعتش تعدادی از کاربرارو اصلا بررسی نمی کنه و تعدادی را هم جواب اشتبا می ده كه فكر كنم اين به خاطر سرعت و هنگ كردن باشه كه دليلشو نمي دونم

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

تنها راه سریع و مطمئن برای اشکال یابی کد شما (که کامپایلر موجود قابلیت شناسایی آن اشکالات را ندارد)، Trace است که شما خودتون اشکال مفهموی کدتون رو تشخیص بدین.

FastCode
یک شنبه 12 شهریور 1391, 12:48 عصر
مشکل کد شما OLEDB ه/چی باعث شد بری سراغش؟اسمش قشنگ بود؟
در ساختار داخلی OLEDB وقتی میخواهید سطر x رو بخونید همه سطرها از یک تا x خونده میشن
و این اتفاق برای هر سلول و read/update میافته
در ضمن کانکشن رو خیلی باز و بسته میکنی

amir4015
یک شنبه 12 شهریور 1391, 13:38 عصر
مي شه كد جايگزين رو بزاريد

amir4015
یک شنبه 12 شهریور 1391, 14:04 عصر
بجز اينكه اسمش قشنگ بود
بانك رو اكسسز انتخاب كردم چون به صورت شبكه استفاده مي كنم و اينكه بتونم به خاطر امنيتش رمز بزارم روي بانك بوده

sgn2006
یک شنبه 12 شهریور 1391, 16:24 عصر
سلام من با m0hammad_01 موافقم با Trace کردن خیلی راحت می تونی مشکل برنامه ت را بفهمهی ولی به هر حال ...
من یه پیشنهاد برات دارم ، برنامت خیلی شلوغه هر تیکه را توی یه تابع بزار و ازش خروجی بگیر ، با این کار هم فهم برنامت می ره بالاتر هم اینکه اگر جایی به خطا برخورد کرد راحت تر می تونی پیداش کنی و سرعتش هم می ره بالاتر ، اگر بتونی از تابع بازگشتی استفاده کنی که عالی می شه ولی هر جور که راحت تری ، همونطور استفاده کن
یه چیز دیگه ، اکسس خیلی ضعیفه ولی اینقدر سرعت راو پایین نمی یاره پیشنهاد من SQL هست اگه بتونی استفاده کنی تمام این محاسبات رو سمت SQL انجام می دی ...
در ضمن خیلی با کانکشن هات ور رفتی (یعنی خیلی باز و بسته شدن) برای این کار یه تابع درست کن و هر کوئری که داری به اون تابع بفرست، این کار توی سرعت خیلی خودش رو نشون می ده ...

موفق باشی

amir4015
یک شنبه 12 شهریور 1391, 18:13 عصر
سلام اگه بانك رو داخل يك گريد ويو بزارم و سطر و ستون هاي اونو مقايسه كنم و ديگه به بانك وصل نشم تاثيري داره

amir4015
یک شنبه 12 شهریور 1391, 20:49 عصر
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

amir4015
دوشنبه 13 شهریور 1391, 01:34 صبح
اطلاعات رو انتقال دادم به گريد ويو بعد بررسي كردم درست شد ممنون كه پيام داديد