NasimBamdad
شنبه 14 شهریور 1394, 15:06 عصر
سلام و خسته نباشید
بنده یک نرم افزار WinForm طراحی کردم که کارای مربوط به ثبت نسخ و حسابداری و ... انجام میدم
کاربران این نرم افزار از منزل هم کار می کنند ، به همین دلیل دیتابیس نرم افزار رو روی یک سرور ویندوزی قراردادم ( هاست خریدم ) و از اون طریق دارن با نرم افزار کار می کنند ( با تنظیم Connection String )
حالا یه مشکلی داریم .
بنده یکسری کوری دارم که نه سنگینه و نه سبک که در پایین نوشتم . زمانی که در لوکال کار می کنیم در مدت زمان 5 تا 10 ثانیه کار می کنه و فایل ها رو می سازه
اما زمانی که روی سرور ازش استفاده می کنیم 10 دقیقه طول می کشه
لازم به ذکر است که سرور هم در ایران هست و پینگ زیر 100 داره .
از BackGround Worker هم استفاده کردم ، که هم برنامه هنگ نکنه و هم بهتر باشه ، اما فایده نداشت
using System;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace Nosakh
{
public partial class XML_Khadamat_Darmangah_Public : Form
{
BackgroundWorker worker = new BackgroundWorker();
private StreamWriter Write;
private MyDB db = new MyDB();
private DataSet ds = new DataSet();
private string sex = string.Empty;
private string exprtyID = string.Empty;
private int count;
private string sg = string.Empty;
private DataSet ds_info = new DataSet();
private string center_code = string.Empty;
public XML_Khadamat_Darmangah_Public()
{
InitializeComponent();
InitializeBackgroundWorker();
}
private void InitializeBackgroundWorker()
{
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged );
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int numz = Convert.ToInt16(comboBox2.SelectedValue);
if (numz == 2)
{
Write =
new StreamWriter(Application.StartupPath + @"\XML\Khadamat\Darmangah\VIS_Omoomi\" + "NOS10.TXT",
false,
Encoding.UTF8);
}
else
{
Write =
new StreamWriter(
Application.StartupPath + @"\XML\Khadamat\Darmangah\VIS_Omoomi\" + "NOS" + numz + ".TXT", false,
Encoding.UTF8);
}
db.SetCommand(@"Select COUNT(*) AS num
FROM dbo.patients INNER JOIN
dbo.invoice ON dbo.patients.id = dbo.invoice.patientid INNER JOIN
dbo.khedmat_type ON dbo.invoice.khID = dbo.khedmat_type.id INNER JOIN
dbo.pezeshk ON dbo.patients.pezeshkID = dbo.pezeshk.id
WHERE dbo.patients.bimeID = '2' AND dbo.patients.centerID = '" + comboBox1.SelectedValue + "' AND dbo.pezeshk.exprtID = 1 AND (dbo.khedmat_type.kh_groupID = 1 OR dbo.khedmat_type.kh_groupID = 13) AND dbo.patients.khadamatID = '" + comboBox2.SelectedValue + "' AND patients.nos_date BETWEEN '" + Date1.Shamsi + "' AND '" + Date2.Shamsi + "'");
DataSet ds1 = db.GetData();
db.exec();
count = Convert.ToInt32((Convert.ToString(ds1.Tables[0].Rows[0]["num"])));
db.SetCommand(@"SELECT dbo.patients.id AS PID, dbo.patients.fname, dbo.patients.lname, dbo.pezeshk.pezeshk_name, dbo.pezeshk.nezam_code, dbo.patients.serial, dbo.patients.sexID, dbo.patients.expr_date, dbo.patients.nos_date,
dbo.patients.page_no, dbo.pezeshk.pezeshktypeID, dbo.khedmat_type.kh_groupID, dbo.invoice.tarefe, dbo.invoice.sazman, dbo.invoice.feranshiz
FROM dbo.patients INNER JOIN
dbo.invoice ON dbo.patients.id = dbo.invoice.patientid INNER JOIN
dbo.khedmat_type ON dbo.invoice.khID = dbo.khedmat_type.id INNER JOIN
dbo.pezeshk ON dbo.patients.pezeshkID = dbo.pezeshk.id
WHERE dbo.patients.bimeID = '2' AND dbo.patients.centerID = '" + comboBox1.SelectedValue + "' AND dbo.pezeshk.exprtID = 1 AND (dbo.khedmat_type.kh_groupID = 1 OR dbo.khedmat_type.kh_groupID = 13) AND dbo.patients.khadamatID = '" + comboBox2.SelectedValue + "' AND patients.nos_date BETWEEN '" + Date1.Shamsi + "' AND '" + Date2.Shamsi + "' ORDER BY dbo.khedmat_type.kh_groupID,dbo.patients.nos_date");
ds_info = db.GetData();
db.exec();
db.SetCommand(@"Select center_code_khadamat From center where id = '" + comboBox1.SelectedValue + "'");
DataSet cn_code = db.GetData();
db.exec();
center_code = cn_code.Tables[0].Rows[0]["center_code_khadamat"].ToString();
string Fdate0 = Date1.Shamsi.Remove(0, 2);
string Ldate0 = Date2.Shamsi.Remove(0, 2);
Fdate0 = Fdate0.Replace("/", "");
Ldate0 = Ldate0.Replace("/", "");
string title = comboBox1.Text;
Write.WriteLine("<Y>");
Write.WriteLine("");
Write.WriteLine("<HR>");
Write.WriteLine("<DC>" + center_code + "</DC>");
Write.WriteLine("<DN>" + title + "</DN>");
Write.WriteLine("<RC>" + count + "</RC>");
Write.WriteLine("<FD>" + Fdate0 + "</FD>");
Write.WriteLine("<TD>" + Ldate0 + "</TD>");
Write.WriteLine("<CR>09186812249 - Mohsen Heshmati</CR>");
Write.WriteLine("<RT>1</RT>");
Write.WriteLine("<AN></AN>");
Write.WriteLine("<NM></NM>");
Write.WriteLine("<MC></MC>");
Write.WriteLine("</HR>");
for (int i = 0; i < count; i++)
{
string nezam_code = Convert.ToString(ds_info.Tables[0].Rows[i]["nezam_code"]);
string pezeshk_name = Convert.ToString(ds_info.Tables[0].Rows[i]["pezeshk_name"]);
string nos_date = Convert.ToString(ds_info.Tables[0].Rows[i]["nos_date"]);
string expr_date = Convert.ToString(ds_info.Tables[0].Rows[i]["expr_date"]);
string serial = Convert.ToString(ds_info.Tables[0].Rows[i]["serial"]);
string page_no = Convert.ToString(ds_info.Tables[0].Rows[i]["page_no"]);
string tarefe = Convert.ToString(ds_info.Tables[0].Rows[0]["tarefe"]);
string sazman = Convert.ToString(ds_info.Tables[0].Rows[0]["sazman"]);
string feranshiz = Convert.ToString(ds_info.Tables[0].Rows[0]["feranshiz"]);
string kh_code = Convert.ToString(ds_info.Tables[0].Rows[0]["kh_code_khadamat"]);
if (ds_info.Tables[0].Rows[i]["kh_groupID"].ToString() == "1")
{
sg = "21";
}
else
{
sg = "22";
}
exprtyID = ds_info.Tables[0].Rows[i]["pezeshktypeID"].ToString();
if (ds_info.Tables[0].Rows[i]["sexID"].ToString() == "1")
{
sex = "1";
}
else
{
sex = "0";
}
int i2 = i + 1;
nos_date = nos_date.Remove(0, 2);
nos_date = nos_date.Replace("/", "");
expr_date = expr_date.Remove(0, 2);
expr_date = expr_date.Replace("/", "");
Write.WriteLine("");
Write.WriteLine("<X>");
Write.WriteLine("<PH>");
Write.WriteLine("<SQ>" + i2 + "</SQ><ND>" + nos_date + "</ND><RD>" + nos_date + "</RD><VD>" + expr_date + "</VD><PT>105</PT><SN>" + serial + "</SN><GR>" + sex + "</GR><RN>" + page_no + "</RN><PG>" + exprtyID + "</PG><PC>" + nezam_code + "</PC><PP>" + tarefe + "</PP><PS>" + feranshiz + "</PS><IS>" + sazman + "</IS><PF>" + pezeshk_name + "</PF>");
Write.WriteLine("</PH>");
Write.WriteLine("<BY>");
Write.WriteLine("<MH><MG>" + kh_code + "</MG><SG>" + sg + "</SG><MD>1</MD><MR>1</MR><MP>" + tarefe + "</MP><MS>" + feranshiz + "</MS><MI>" + sazman + "</MI></MH>");
Write.WriteLine("</BY>");
Write.WriteLine("</X>");
int divid = count/100;
}
Write.WriteLine("</Y>");
Write.Close();
MessageBox.Show("فرآیند به پایان رسید");
}
private void XML_Khadamat_Load(object sender, EventArgs e)
{
Date1.Today_Click(null, null);
Date2.Today_Click(null, null);
Date1.FirstDayOfMonth_Click(null, null);
Date2.LastDayOfMonth_Click(null, null);
string[] str = Date1.Shamsi.Split('/');
for (int i = 0; i < str.Length; i++) ;
string mn1 = Convert.ToString(Convert.ToInt32(str[1]) - 1);
if (mn1.Length == 1)
{
mn1 = 0 + mn1;
}
string[] str2 = Date2.Shamsi.Split('/');
for (int i = 0; i < str2.Length; i++) ;
string mn2 = Convert.ToString(Convert.ToInt32(str2[1]) - 1);
if (mn2.Length == 1)
{
mn2 = 0 + mn2;
}
Date1.Text = str[0] + "/" + mn1.ToString() + "/" + str[2];
Date2.Text = str2[0] + "/" + mn2.ToString() + "/" + str2[2];
db.SetCommand("Select * from center");
ds = db.GetData();
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "center_name";
comboBox1.ValueMember = "id";
db.disconnect();
////////////////////
db.SetCommand("Select * from khadamat");
ds = db.GetData();
comboBox2.DataSource = ds.Tables[0];
comboBox2.DisplayMember = "sandogh_name";
comboBox2.ValueMember = "id";
db.disconnect();
}
private void radButton1_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
worker.RunWorkerAsync();
}
}
}
آیا کد نویسی بهینه نیست یا سرور مشکل داره ؟
بنده یک نرم افزار WinForm طراحی کردم که کارای مربوط به ثبت نسخ و حسابداری و ... انجام میدم
کاربران این نرم افزار از منزل هم کار می کنند ، به همین دلیل دیتابیس نرم افزار رو روی یک سرور ویندوزی قراردادم ( هاست خریدم ) و از اون طریق دارن با نرم افزار کار می کنند ( با تنظیم Connection String )
حالا یه مشکلی داریم .
بنده یکسری کوری دارم که نه سنگینه و نه سبک که در پایین نوشتم . زمانی که در لوکال کار می کنیم در مدت زمان 5 تا 10 ثانیه کار می کنه و فایل ها رو می سازه
اما زمانی که روی سرور ازش استفاده می کنیم 10 دقیقه طول می کشه
لازم به ذکر است که سرور هم در ایران هست و پینگ زیر 100 داره .
از BackGround Worker هم استفاده کردم ، که هم برنامه هنگ نکنه و هم بهتر باشه ، اما فایده نداشت
using System;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace Nosakh
{
public partial class XML_Khadamat_Darmangah_Public : Form
{
BackgroundWorker worker = new BackgroundWorker();
private StreamWriter Write;
private MyDB db = new MyDB();
private DataSet ds = new DataSet();
private string sex = string.Empty;
private string exprtyID = string.Empty;
private int count;
private string sg = string.Empty;
private DataSet ds_info = new DataSet();
private string center_code = string.Empty;
public XML_Khadamat_Darmangah_Public()
{
InitializeComponent();
InitializeBackgroundWorker();
}
private void InitializeBackgroundWorker()
{
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged );
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int numz = Convert.ToInt16(comboBox2.SelectedValue);
if (numz == 2)
{
Write =
new StreamWriter(Application.StartupPath + @"\XML\Khadamat\Darmangah\VIS_Omoomi\" + "NOS10.TXT",
false,
Encoding.UTF8);
}
else
{
Write =
new StreamWriter(
Application.StartupPath + @"\XML\Khadamat\Darmangah\VIS_Omoomi\" + "NOS" + numz + ".TXT", false,
Encoding.UTF8);
}
db.SetCommand(@"Select COUNT(*) AS num
FROM dbo.patients INNER JOIN
dbo.invoice ON dbo.patients.id = dbo.invoice.patientid INNER JOIN
dbo.khedmat_type ON dbo.invoice.khID = dbo.khedmat_type.id INNER JOIN
dbo.pezeshk ON dbo.patients.pezeshkID = dbo.pezeshk.id
WHERE dbo.patients.bimeID = '2' AND dbo.patients.centerID = '" + comboBox1.SelectedValue + "' AND dbo.pezeshk.exprtID = 1 AND (dbo.khedmat_type.kh_groupID = 1 OR dbo.khedmat_type.kh_groupID = 13) AND dbo.patients.khadamatID = '" + comboBox2.SelectedValue + "' AND patients.nos_date BETWEEN '" + Date1.Shamsi + "' AND '" + Date2.Shamsi + "'");
DataSet ds1 = db.GetData();
db.exec();
count = Convert.ToInt32((Convert.ToString(ds1.Tables[0].Rows[0]["num"])));
db.SetCommand(@"SELECT dbo.patients.id AS PID, dbo.patients.fname, dbo.patients.lname, dbo.pezeshk.pezeshk_name, dbo.pezeshk.nezam_code, dbo.patients.serial, dbo.patients.sexID, dbo.patients.expr_date, dbo.patients.nos_date,
dbo.patients.page_no, dbo.pezeshk.pezeshktypeID, dbo.khedmat_type.kh_groupID, dbo.invoice.tarefe, dbo.invoice.sazman, dbo.invoice.feranshiz
FROM dbo.patients INNER JOIN
dbo.invoice ON dbo.patients.id = dbo.invoice.patientid INNER JOIN
dbo.khedmat_type ON dbo.invoice.khID = dbo.khedmat_type.id INNER JOIN
dbo.pezeshk ON dbo.patients.pezeshkID = dbo.pezeshk.id
WHERE dbo.patients.bimeID = '2' AND dbo.patients.centerID = '" + comboBox1.SelectedValue + "' AND dbo.pezeshk.exprtID = 1 AND (dbo.khedmat_type.kh_groupID = 1 OR dbo.khedmat_type.kh_groupID = 13) AND dbo.patients.khadamatID = '" + comboBox2.SelectedValue + "' AND patients.nos_date BETWEEN '" + Date1.Shamsi + "' AND '" + Date2.Shamsi + "' ORDER BY dbo.khedmat_type.kh_groupID,dbo.patients.nos_date");
ds_info = db.GetData();
db.exec();
db.SetCommand(@"Select center_code_khadamat From center where id = '" + comboBox1.SelectedValue + "'");
DataSet cn_code = db.GetData();
db.exec();
center_code = cn_code.Tables[0].Rows[0]["center_code_khadamat"].ToString();
string Fdate0 = Date1.Shamsi.Remove(0, 2);
string Ldate0 = Date2.Shamsi.Remove(0, 2);
Fdate0 = Fdate0.Replace("/", "");
Ldate0 = Ldate0.Replace("/", "");
string title = comboBox1.Text;
Write.WriteLine("<Y>");
Write.WriteLine("");
Write.WriteLine("<HR>");
Write.WriteLine("<DC>" + center_code + "</DC>");
Write.WriteLine("<DN>" + title + "</DN>");
Write.WriteLine("<RC>" + count + "</RC>");
Write.WriteLine("<FD>" + Fdate0 + "</FD>");
Write.WriteLine("<TD>" + Ldate0 + "</TD>");
Write.WriteLine("<CR>09186812249 - Mohsen Heshmati</CR>");
Write.WriteLine("<RT>1</RT>");
Write.WriteLine("<AN></AN>");
Write.WriteLine("<NM></NM>");
Write.WriteLine("<MC></MC>");
Write.WriteLine("</HR>");
for (int i = 0; i < count; i++)
{
string nezam_code = Convert.ToString(ds_info.Tables[0].Rows[i]["nezam_code"]);
string pezeshk_name = Convert.ToString(ds_info.Tables[0].Rows[i]["pezeshk_name"]);
string nos_date = Convert.ToString(ds_info.Tables[0].Rows[i]["nos_date"]);
string expr_date = Convert.ToString(ds_info.Tables[0].Rows[i]["expr_date"]);
string serial = Convert.ToString(ds_info.Tables[0].Rows[i]["serial"]);
string page_no = Convert.ToString(ds_info.Tables[0].Rows[i]["page_no"]);
string tarefe = Convert.ToString(ds_info.Tables[0].Rows[0]["tarefe"]);
string sazman = Convert.ToString(ds_info.Tables[0].Rows[0]["sazman"]);
string feranshiz = Convert.ToString(ds_info.Tables[0].Rows[0]["feranshiz"]);
string kh_code = Convert.ToString(ds_info.Tables[0].Rows[0]["kh_code_khadamat"]);
if (ds_info.Tables[0].Rows[i]["kh_groupID"].ToString() == "1")
{
sg = "21";
}
else
{
sg = "22";
}
exprtyID = ds_info.Tables[0].Rows[i]["pezeshktypeID"].ToString();
if (ds_info.Tables[0].Rows[i]["sexID"].ToString() == "1")
{
sex = "1";
}
else
{
sex = "0";
}
int i2 = i + 1;
nos_date = nos_date.Remove(0, 2);
nos_date = nos_date.Replace("/", "");
expr_date = expr_date.Remove(0, 2);
expr_date = expr_date.Replace("/", "");
Write.WriteLine("");
Write.WriteLine("<X>");
Write.WriteLine("<PH>");
Write.WriteLine("<SQ>" + i2 + "</SQ><ND>" + nos_date + "</ND><RD>" + nos_date + "</RD><VD>" + expr_date + "</VD><PT>105</PT><SN>" + serial + "</SN><GR>" + sex + "</GR><RN>" + page_no + "</RN><PG>" + exprtyID + "</PG><PC>" + nezam_code + "</PC><PP>" + tarefe + "</PP><PS>" + feranshiz + "</PS><IS>" + sazman + "</IS><PF>" + pezeshk_name + "</PF>");
Write.WriteLine("</PH>");
Write.WriteLine("<BY>");
Write.WriteLine("<MH><MG>" + kh_code + "</MG><SG>" + sg + "</SG><MD>1</MD><MR>1</MR><MP>" + tarefe + "</MP><MS>" + feranshiz + "</MS><MI>" + sazman + "</MI></MH>");
Write.WriteLine("</BY>");
Write.WriteLine("</X>");
int divid = count/100;
}
Write.WriteLine("</Y>");
Write.Close();
MessageBox.Show("فرآیند به پایان رسید");
}
private void XML_Khadamat_Load(object sender, EventArgs e)
{
Date1.Today_Click(null, null);
Date2.Today_Click(null, null);
Date1.FirstDayOfMonth_Click(null, null);
Date2.LastDayOfMonth_Click(null, null);
string[] str = Date1.Shamsi.Split('/');
for (int i = 0; i < str.Length; i++) ;
string mn1 = Convert.ToString(Convert.ToInt32(str[1]) - 1);
if (mn1.Length == 1)
{
mn1 = 0 + mn1;
}
string[] str2 = Date2.Shamsi.Split('/');
for (int i = 0; i < str2.Length; i++) ;
string mn2 = Convert.ToString(Convert.ToInt32(str2[1]) - 1);
if (mn2.Length == 1)
{
mn2 = 0 + mn2;
}
Date1.Text = str[0] + "/" + mn1.ToString() + "/" + str[2];
Date2.Text = str2[0] + "/" + mn2.ToString() + "/" + str2[2];
db.SetCommand("Select * from center");
ds = db.GetData();
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "center_name";
comboBox1.ValueMember = "id";
db.disconnect();
////////////////////
db.SetCommand("Select * from khadamat");
ds = db.GetData();
comboBox2.DataSource = ds.Tables[0];
comboBox2.DisplayMember = "sandogh_name";
comboBox2.ValueMember = "id";
db.disconnect();
}
private void radButton1_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
worker.RunWorkerAsync();
}
}
}
آیا کد نویسی بهینه نیست یا سرور مشکل داره ؟