我有一个C#程序,需要导入一个大约有42,000行的csv文件。文件中所有数据都以以下方式存储:
Zipcode,City,State 我将所有信息导入到listview的三列中。目前,导入这些数据需要约30-50秒的时间。我的问题是如何优化代码以缩短这个时间?
以下是我的一部分代码。注释掉的代码是我之前尝试过的,但没有成功地减少时间,因此我重新编写了更易于阅读的代码。
Zipcode,City,State 我将所有信息导入到listview的三列中。目前,导入这些数据需要约30-50秒的时间。我的问题是如何优化代码以缩短这个时间?
以下是我的一部分代码。注释掉的代码是我之前尝试过的,但没有成功地减少时间,因此我重新编写了更易于阅读的代码。
//These are globally declared.
lvZip.Columns.Add("Zipcode", 150, HorizontalAlignment.Left);
lvZip.Columns.Add("City", 150, HorizontalAlignment.Left);
lvZip.Columns.Add("State", 150, HorizontalAlignment.Left);
lvZip.View = View.Details;
lvZip.Items.Clear();
//string dir = System.IO.Path.GetDirectoryName(
// System.Reflection.Assembly.GetExecutingAssembly().Location);
//string path = dir + @"\zip_code_database_edited.csv";
//var open = new StreamReader(File.OpenRead(path));
//foreach (String s in File.ReadAllLines(path))
//{
// Zipinfo = s.Split(',');
// Zipinfo[0] = Zipinfo[0].Trim();
// Zipinfo[1] = Zipinfo[1].Trim();
// Zipinfo[2] = Zipinfo[2].Trim();
// lvItem = new ListViewItem(Zipinfo);
// lvZip.Items.Add(lvItem);
//}
//open.Close();
StreamReader myreader = File.OpenText(path);
aLine = myreader.ReadLine();
while (aLine != null)
{
Zipinfo = aLine.Split(',');
Zipinfo[0] = Zipinfo[0].Trim();
Zipinfo[1] = Zipinfo[1].Trim();
Zipinfo[2] = Zipinfo[2].Trim();
lvItem = new ListViewItem(Zipinfo);
lvZip.Items.Add(lvItem);
aLine = myreader.ReadLine();
}
myreader.Close();
BeginUpdate()
和EndUpdate()
将提供更为可见的性能提升。但是 Tweety 建议采用AddRange()
方法将进一步优化您的代码。虽然性能提升可能不像AddRange()
那样显著,但TextFieldParser
类专门设计用于处理结构化文本文件,如 CSV。 - Derek W