需求是这样的.我btnOpen一个文件用datagridview显示出来,同时还需求1个另存为的功能,但我btnCopy另存为的时候又要打开一次文件(这样就不方便了).我就在代码里增加了红色部分代码,问题就出来了只要打开1M以上的数据就会卡在哪里不动了,请问下有什么解决办法吗? using (StreamReader sr = new StreamReader(dlgOpenFile.FileName, false))
{
s = sr.ReadLine();
split = s.Split('\t');// \t格式转换
int i = 0;
foreach (String colname in split)
{
table.Columns.Add(colname, System.Type.GetType("System.String"));
i++;
}
int j = 0;
while (sr.Peek() > -1)
{
s = sr.ReadLine(); j = 0;
row = table.NewRow();
split = s.Split('\t');// \t格式转换
foreach (String colname in split)
{
row[j] = colname;
txtValue += colname;////存储文件数据
j++;
// this.textBox1.Text += colname;
if (j >= i) { break; }
}
table.Rows.Add(row);
}
{
s = sr.ReadLine();
split = s.Split('\t');// \t格式转换
int i = 0;
foreach (String colname in split)
{
table.Columns.Add(colname, System.Type.GetType("System.String"));
i++;
}
int j = 0;
while (sr.Peek() > -1)
{
s = sr.ReadLine(); j = 0;
row = table.NewRow();
split = s.Split('\t');// \t格式转换
foreach (String colname in split)
{
row[j] = colname;
txtValue += colname;////存储文件数据
j++;
// this.textBox1.Text += colname;
if (j >= i) { break; }
}
table.Rows.Add(row);
}
foreach (String colname in split)
{
row[j] = colname;
txtValue += colname;////存储文件数据
j++;
this.textBox1.Text += colname;
if (j >= i) { break; }
}
table.Rows.Add(row);
请使用:
StringBuilder sb = new StringBuilder();
sb.AppendLine(colname);
直接使用+进行字符串拼接,会导致很大的性能消耗,因为每次string拼接,都会导致创建一个新的string来存储拼接后的字符串。
2、显示:任务只在解析后的显示
3、存文件:读取gridview内的数据组织好结构并save
4、拷贝文件:无论是要拷贝的新文件还是旧文件,请注意不要让读取的时候来帮你存储要拷贝的数据。直接File.CopyTo即可。不管你要实现怎样一个功能。分析需求、解析需求(拆分)、设计程序、实现程序。4个步骤不可缺少。也可以说一码归一码混淆只会得不偿失。一次性赋值和+=拼接赋值的性能是不一样的。根据具体的需求定。