PDA

View Full Version : سرعت پایین و هنگ کردن هنگام اجرای برنامه سی شارپ در شبکه



aminttt
یک شنبه 19 فروردین 1397, 13:46 عصر
سلام دوستان لطفاً راهنمایی کنید برنامه ای نوشته شده با زبان سی شارپ ، که روی یک سیستم وصل شده است که 4 تا 5 کلاینت دارد هنگام اجرای برنامه روی کلاینت سیستم هنگ می کند و دیر دستورات اجرا می شود. با network 3.5 نوشته شده است. از دیتابیس اکسس استفاده شده.
لطفاً راهنمایی کنید.

danialafshari
یک شنبه 19 فروردین 1397, 13:55 عصر
با سلام
سوال شما مثل این میمونه که بگید ماشین من توی سر بالایی کم میاره بنظرتون مشکلش چیه؟
خب نه کدی قرار دادید نه اطلاعاتی نه تکنولوژی و نه اصلاً گفتید روی شبکه با sql وصله یا socket programming
توصیه میکنم کامپیوتر سرور رو یک سیستم متوسط باشه و اگر از sql استفاده میکنید firewall رو خاموش کنید، کدهاتون رو بهینه کنید و اگر مبتدی هستید از ORM هایی مثل Entity Framework استفاده کنید که خودشون مدیریت کنند
و حتماً حتماً برای تراکنش ها مخصوصاً جستجو و گزارش گیری از Stored Procedure ها استفاده کنید
و میتونید برای بالا بردن سرعت ورژن کامل Sql Server Enterprise رو نصب کنید و از connection string اتچ شده استفاده نکنید
موفق باشید

aminttt
یک شنبه 19 فروردین 1397, 17:17 عصر
با سلام
سوال شما مثل این میمونه که بگید ماشین من توی سر بالایی کم میاره بنظرتون مشکلش چیه؟
خب نه کدی قرار دادید نه اطلاعاتی نه تکنولوژی و نه اصلاً گفتید روی شبکه با sql وصله یا socket programming
توصیه میکنم کامپیوتر سرور رو یک سیستم متوسط باشه و اگر از sql استفاده میکنید firewall رو خاموش کنید، کدهاتون رو بهینه کنید و اگر مبتدی هستید از ORM هایی مثل Entity Framework استفاده کنید که خودشون مدیریت کنند
و حتماً حتماً برای تراکنش ها مخصوصاً جستجو و گزارش گیری از Stored Procedure ها استفاده کنید
و میتونید برای بالا بردن سرعت ورژن کامل Sql Server Enterprise رو نصب کنید و از connection string اتچ شده استفاده نکنید
موفق باشید
دقیقاًً برنامه مثل ماشینی که گفتید می مونه برنامه پایگاه داده استفاده شده اکسس هستش.قبلا این برنامه با زبان دلفی نوشته شده و بخاطر اینکه به سورس اصلی برنامه دسترسی نداشتیم به زبان سی شارپ نوشته ایم و از تکنولوژی خاصی استفاده نشده همون دستورات اولیه using system.oledb
برنامه که با دلفی کار می کردند مشکل از لحاظ سرعت نداشتن و توی سی شارپ الان این مشکل داره.

رامین مرادی
یک شنبه 19 فروردین 1397, 19:45 عصر
دقیقاًً برنامه مثل ماشینی که گفتید می مونه برنامه پایگاه داده استفاده شده اکسس هستش.قبلا این برنامه با زبان دلفی نوشته شده و بخاطر اینکه به سورس اصلی برنامه دسترسی نداشتیم به زبان سی شارپ نوشته ایم و از تکنولوژی خاصی استفاده نشده همون دستورات اولیه using system.oledb
برنامه که با دلفی کار می کردند مشکل از لحاظ سرعت نداشتن و توی سی شارپ الان این مشکل داره.

در صورت امکان دیتابستون رو به اس کیو ال سرور تغییر بدین. اکسس برای کارهای شبکه مناسب نیست. در ضمن کوئری که کند عمل میکنه رو هم بزارید اینجاش.شاید بشه بهینه ش کرد

danialafshari
دوشنبه 20 فروردین 1397, 01:44 صبح
دقیقاًً برنامه مثل ماشینی که گفتید می مونه برنامه پایگاه داده استفاده شده اکسس هستش.قبلا این برنامه با زبان دلفی نوشته شده و بخاطر اینکه به سورس اصلی برنامه دسترسی نداشتیم به زبان سی شارپ نوشته ایم و از تکنولوژی خاصی استفاده نشده همون دستورات اولیه using system.oledb
برنامه که با دلفی کار می کردند مشکل از لحاظ سرعت نداشتن و توی سی شارپ الان این مشکل داره.

با سلام
ماهیت Access تحت شبکه نیست و Share کردن اون کار اشتباهیه وقتی SQL Server هست و نیازتون هم تحت شبکس تعجب میکنم چرا ازش استفاده نکردید
به هر حال...چون از Ado.net استفاده کردید با تغییرات خیلی اندک بانک برنامه را تبدیل به SQL Server کنید و نرم افزارهایی مانند ESF Database Migration Toolkit Pro و ... هستند که این کار رو بصورت اتوماتیک و بدون از بین رفتن اطلاعات براتون انجام میدهند
برای شبکه کردن هم از آموزشی که در تاپیک زیر هست استفاده کنید
http://barnamenevis.org/showthread.php?387720-%D9%81%DB%8C%D9%84%D9%85-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%AA%D8%AD%D8%AA-%D8%B4%D8%A8%DA%A9%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%AA%D8%AD%D8%AA-%D8%A8%D8%A7%D9%86%DA%A9-SQL-SERVER
تا اینجا کار تمومه. در مرحله بعد اگر تراکنشاتون زیاد هست و سرعت بهتری رو می خواهید تجربه کنید بهتره Select هاتون رو درون Stored Procedure قرار بدید
موفق باشید

aminttt
دوشنبه 20 فروردین 1397, 08:09 صبح
private void telsabet_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
try
{
Form2 from2 = new Form2();
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\narjes.mdb;Persist" + " Security Info=True;Jet OLEDB:Database Password=(narjesshiraz1374)");
con.Open();
string quri = "select code_n,name_n,family_n,mob1_n,tel1_n,addresshome_n ,thmr,thmh,thvh,family_rabet from t_nikokar where tel1_n like'" + telsabet.Text + "%'";
OleDbDataAdapter ada = new OleDbDataAdapter(quri, con);
DataTable dt = new DataTable();
ada.Fill(dt);
if (dt.Rows.Count > 0)
{
dt.Columns[0].ColumnName = "کد نیکوکار";
dt.Columns[1].ColumnName = "نام نیکوکار";
dt.Columns[2].ColumnName = "نام خانوادگی";
dt.Columns[3].ColumnName = "شماره موبایل";
dt.Columns[4].ColumnName = "تلفن ثابت";
dt.Columns[5].ColumnName = "آدرس";
dt.Columns[6].ColumnName = "رابط ";
dt.Columns[7].ColumnName = "حضوری";
dt.Columns[8].ColumnName = "واریز حضوری";
dt.Columns[9].ColumnName = "فامیل رابط";
from2.dataGridView1.DataSource = dt;


from2.OnNewRow += new Form2.dgwRowHandler(frm2_OnNewRow);
from2.Show();
}
con.Close();
}
catch
{
}


}
}




private void frm2_OnNewRow(DataGridViewRow dtgvr)
{
if (dtgvr.Cells["کد نیکوکار"].Value != null)
code_n.Text = dtgvr.Cells["کد نیکوکار"].Value.ToString();
if (dtgvr.Cells["نام نیکوکار"].Value != null)
name_n.Text = dtgvr.Cells["نام نیکوکار"].Value.ToString();
if (dtgvr.Cells["نام خانوادگی"].Value != null)
family_n.Text = dtgvr.Cells["نام خانوادگی"].Value.ToString();
if (dtgvr.Cells["تلفن ثابت"].Value != null)
telsabet.Text = dtgvr.Cells["تلفن ثابت"].Value.ToString();
if (dtgvr.Cells["نام رابط"].Value != null)
name_r.Text = dtgvr.Cells["نام رابط"].Value.ToString();
if (dtgvr.Cells["فامیل رابط"].Value != null)
famil_r.Text = dtgvr.Cells["فامیل رابط"].Value.ToString();
namerabet.Text = name_r.Text + "" + famil_r.Text;
code_gh.Focus();
}

aminttt
سه شنبه 21 فروردین 1397, 07:11 صبح
private void telsabet_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
try
{
Form2 from2 = new Form2();
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\narjes.mdb;Persist" + " Security Info=True;Jet OLEDB:Database Password=(narjesshiraz1374)");
con.Open();
string quri = "select code_n,name_n,family_n,mob1_n,tel1_n,addresshome_n ,thmr,thmh,thvh,family_rabet from t_nikokar where tel1_n like'" + telsabet.Text + "%'";
OleDbDataAdapter ada = new OleDbDataAdapter(quri, con);
DataTable dt = new DataTable();
ada.Fill(dt);
if (dt.Rows.Count > 0)
{
dt.Columns[0].ColumnName = "کد نیکوکار";
dt.Columns[1].ColumnName = "نام نیکوکار";
dt.Columns[2].ColumnName = "نام خانوادگی";
dt.Columns[3].ColumnName = "شماره موبایل";
dt.Columns[4].ColumnName = "تلفن ثابت";
dt.Columns[5].ColumnName = "آدرس";
dt.Columns[6].ColumnName = "رابط ";
dt.Columns[7].ColumnName = "حضوری";
dt.Columns[8].ColumnName = "واریز حضوری";
dt.Columns[9].ColumnName = "فامیل رابط";
from2.dataGridView1.DataSource = dt;


from2.OnNewRow += new Form2.dgwRowHandler(frm2_OnNewRow);
from2.Show();
}
con.Close();
}
catch
{
}


}
}




private void frm2_OnNewRow(DataGridViewRow dtgvr)
{
if (dtgvr.Cells["کد نیکوکار"].Value != null)
code_n.Text = dtgvr.Cells["کد نیکوکار"].Value.ToString();
if (dtgvr.Cells["نام نیکوکار"].Value != null)
name_n.Text = dtgvr.Cells["نام نیکوکار"].Value.ToString();
if (dtgvr.Cells["نام خانوادگی"].Value != null)
family_n.Text = dtgvr.Cells["نام خانوادگی"].Value.ToString();
if (dtgvr.Cells["تلفن ثابت"].Value != null)
telsabet.Text = dtgvr.Cells["تلفن ثابت"].Value.ToString();
if (dtgvr.Cells["نام رابط"].Value != null)
name_r.Text = dtgvr.Cells["نام رابط"].Value.ToString();
if (dtgvr.Cells["فامیل رابط"].Value != null)
famil_r.Text = dtgvr.Cells["فامیل رابط"].Value.ToString();
namerabet.Text = name_r.Text + "" + famil_r.Text;
code_gh.Focus();
}

دوستان راهنمایی کنید..............

Mahmoud.Afrad
سه شنبه 21 فروردین 1397, 08:59 صبح
به نظر من ، یکسری کارهای تکراری نباید در رویداد KeyPress انجام بگیره(مثل تغییر نام ستونها). و قضیه from2.OnNewRow هم مشخص نیست پس اگر میتونید پروژه را قرار بدید؟ اگر نمیتونید یک پروژه جدید بسازید و فقط کد همین فرم و فرم2 را بهش اضافه کنید و همراه دیتابیس قرار بدید تا تست کنیم.

aminttt
سه شنبه 21 فروردین 1397, 15:52 عصر
پروژه ایجاد شده ممنون ازشما

aminttt
چهارشنبه 22 فروردین 1397, 07:31 صبح
به نظر من ، یکسری کارهای تکراری نباید در رویداد KeyPress انجام بگیره(مثل تغییر نام ستونها). و قضیه from2.OnNewRow هم مشخص نیست پس اگر میتونید پروژه را قرار بدید؟ اگر نمیتونید یک پروژه جدید بسازید و فقط کد همین فرم و فرم2 را بهش اضافه کنید و همراه دیتابیس قرار بدید تا تست کنیم.

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

aminttt
چهارشنبه 22 فروردین 1397, 16:33 عصر
به نظر من ، یکسری کارهای تکراری نباید در رویداد KeyPress انجام بگیره(مثل تغییر نام ستونها). و قضیه from2.OnNewRow هم مشخص نیست پس اگر میتونید پروژه را قرار بدید؟ اگر نمیتونید یک پروژه جدید بسازید و فقط کد همین فرم و فرم2 را بهش اضافه کنید و همراه دیتابیس قرار بدید تا تست کنیم.



پروژه ایجاد شده ممنون ازشما

Mahmoud.Afrad
چهارشنبه 22 فروردین 1397, 18:43 عصر
سرعتش هیچ مشکلی ندارد.
اگر نیاز به شبکه و استفاده همزمان چند کلاینت دارید باید دیتابیس را به sqlserver تغییر بدید. همونطور که دوستان گفتند access قابلیت شبکه ندارد.

aminttt
چهارشنبه 22 فروردین 1397, 21:16 عصر
سرعتش هیچ مشکلی ندارد.
اگر نیاز به شبکه و استفاده همزمان چند کلاینت دارید باید دیتابیس را به sqlserver تغییر بدید. همونطور که دوستان گفتند access قابلیت شبکه ندارد.
امکانش هست سورس کانکشن کلاینت به سرور را برام ارسال بزارید