我正在开发一个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秒。
答案 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并滚动或“读取更多”按钮并按需加载其余文件。