如何提高ASP Literal控件的写性能

时间:2014-05-27 18:20:51

标签: c# asp.net

我正在开发一个Web应用程序,它需要以只读格式在文本文件中显示信息。我使用字符串生成器和Literal控件(已发布代码中的litProgram)完成此操作。我读取文本文件,使用字符串生成器将其内容复制到新字符串中,然后将Literal控件的Text属性设置为我的新字符串。这是后面代码中的函数:

protected void viewCNC()
{
   // Clear any existing program text
   litProgram.Text = "";
   // Get Workcenter name for folder navigation
   string workcenter = gvDispatchList.SelectedRow.Cells[this.Master.getColumnID("WorkCenter", gvDispatchList)].Text;
   // Get program name from program list
   if (gvPrograms.SelectedRow != null)
   {
     string program = gvPrograms.SelectedRow.Cells[0].Text;

     // Change label
     lblProgramName.Text = program;

     // Read file
      using (StreamReader sr = new StreamReader("\\\\server\\CNCPrograms\\" + workcenter + "\\MasterPrograms\\" + program))
      {
          StringBuilder sb = new StringBuilder();
          while (!sr.EndOfStream)
          {
            sb.Append(sr.ReadLine());
            sb.Append("<br/>");
          }

          litProgram.Text = sb.ToString();

          upnlViewCNC.Update();
          modalViewCNC.Show();
       }
   }
   else
   {

       MessageBox msg = new MessageBox();
       msg.Alert("Please select a program.");
    }
}

这种方法非常有效,但是当我尝试从非常大的文件(超过1000 KB)显示文本时出现问题。随着Literal文本的更新,存在非常明显的延迟。我已经跟踪了&#34; litProgram.Text = sb.ToString();&#34;线。

我的问题是,这是一个很好的使用方法,有没有办法让我更快?当用户等待应用程序完成将文本复制到文字时,不希望延迟最多2-3秒。

1 个答案:

答案 0 :(得分:0)

StringBuilder.ToString()生成一个新字符串,你有2个操作a)创建一个新字符串,b)将它分配给文字控件

litProgram.Text = sb.ToString();

要确保Literal缓慢

string s = sb.ToString();
litProgram.Text = s;

并将其与之前的衡量标准进行比较。

同样在这里

while (!sr.EndOfStream)
{
    sb.Append(sr.ReadLine());
    sb.Append("<br/>");
}

根据this comparison,做

可能是有意义的
string s = String.Empty;
while ((s = sr.ReadLine()) != null)
{
    sb.Append(s);
    sb.Append("<br/>");
}

我认为,您的代码看起来不错,如果您对性能有疑虑,可以检查是否真的需要一次性返回1M数据。仅返回前100K并滚动或“读取更多”按钮并按需加载其余文件。