我正在开发一个web应用程序,它需要以只读格式在文本文件中显示信息。我使用了一个字符串生成器和一个文字控件(在发布的代码中是litProgram)来完成这个任务。我读取文本文件,使用字符串生成器将其内容复制到新字符串中,然后将文字控件的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)的文本时,问题就出现了。随着文字文本的更新,有一个非常明显的滞后。我将经济放缓的原因追溯到"litProgram.Text = sb.ToString();“行。
我的问题是,这是否一种很好的使用方法,我是否有办法使它更快?当用户等待应用程序完成文本复制到文字时,延迟2-3秒是不可取的。
发布于 2014-05-28 07:11:02
StringBuilder.ToString()生成一个新字符串,您有两个操作:( a)生成一个新字符串,b)将其赋值给文字控件
litProgram.Text = sb.ToString();要确保文字的速度慢,请执行以下操作
string s = sb.ToString();
litProgram.Text = s;并将其与你以前的衡量标准进行比较。
这里也一样
while (!sr.EndOfStream)
{
sb.Append(sr.ReadLine());
sb.Append("<br/>");
}根据这种比较的说法,这样做可能是有意义的
string s = String.Empty;
while ((s = sr.ReadLine()) != null)
{
sb.Append(s);
sb.Append("<br/>");
}我认为,您的代码看起来不错,如果您担心性能问题,您可以检查是否真的需要一次返回100万个数据。只返回前100 K并放置滚动或“读取更多”的-button,并按需加载文件的其余部分。
https://stackoverflow.com/questions/23896349
复制相似问题