priyanka arava Ответов: 1

Как я могу улучшить скорость работы нижеприведенной функции?


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 петля.

1 Ответов

Рейтинг:
2

F-ES Sitecore

Попробуйте использовать параллельную версию "for". Если вы получаете производительность от этого будет зависеть от ряда вещей, но это, вероятно, самая простая вещь, чтобы попробовать. Google "c# parallel for" для получения подробной информации и примеров.