Как я могу улучшить скорость работы нижеприведенной функции?
protected void btnUpload_Click(object sender, EventArgs e) { ResetStatus(); for (int i = 1; i <= 10; i++) { string file_control = "FileUpload" + i.ToString(); string link_button_control = "LinkButton" + i.ToString(); FileUpload fileUpload = (FileUpload)this.Master.FindControl("MainContent").FindControl(file_control); LinkButton linkButton = (LinkButton)this.Master.FindControl("MainContent").FindControl(link_button_control); string label_file_name_control = "LabelFileName" + i.ToString(); Label label_file_name = (Label)this.Master.FindControl("MainContent").FindControl(label_file_name_control); if (fileUpload.PostedFile.FileName != "") { string f_type = Functions.CheckFileType(fileUpload.PostedFile.FileName); string file_name = fileUpload.PostedFile.FileName; if (f_type == "xls" && f_type != "xlsx") { error += "\nFile number " + i.ToString() + " " + file_name + " should be in Excel format!"; linkButton.Visible = true; linkButton.Text = "Error found, click to show error"; } else { DateTime rightnow = DateTime.Now; string user_name = SharedFunctionV3.UserInfo.GetUserInfofromAD(Session["UserID"].ToString()).DisplayName; string new_file_name = Session["UserID"].ToString() + rightnow.ToString("yyyyMMddhhmmss") + "ForecastDataUpload" + i.ToString() + ".xls"; string f_name = Server.MapPath(".") + "\\upload\\" + new_file_name; fileUpload.PostedFile.SaveAs(f_name); label_file_name.Text = f_name; if (CheckFile(f_name, i) == 0)//edited { linkButton.Visible = true; linkButton.Text = "Error found, click to show error"; } else { UploadRecord(f_name, i); } } } } tbError.Text = error; }
Что я уже пробовал:
Предположим если цикл занимает 10 раундов как я могу сделать один вызов функции UploadRecord для всех 10 раз так что это сократит время необходимое для загрузки массовой нагрузки
Richard Deeming
if (f_type == "xls" && f_type != "xlsx")
Можете ли вы придумать строковое значение, которое было бы равно обоим
"xls"
и "xlsx"
в одно и то же время?И я тоже. Либо ваша вторая проверка на этой строке не требуется, либо первая
==
должно быть !=
вместо.string user_name = SharedFunctionV3.UserInfo.GetUserInfofromAD(Session["UserID"].ToString()).DisplayName;
Доступ к AD особенно медленный, и эта линия вообще не зависит от переменной цикла. Попробуйте переместить его за пределы
for
петля.