Szybszy sposób czytania csv do siatki
Mam następujące funkcje w Windows Forms .NET 3.5
Działa dobrze dla csv z rekordami mniejszymi niż 10 000, ale jest wolniejszy dla rekordów powyżej 30 000. Plik wejściowy csv może zawierać dowolne rekordy od 1 do 1 000 000 rekordów
Kod aktualnie używany:
/// <summary>
/// This will import file to the collection object
/// </summary>
private bool ImportFile()
{
try
{
String fName;
String textLine = string.Empty;
String[] splitLine;
// clear the grid view
accountsDataGridView.Rows.Clear();
fName = openFileDialog1.FileName;
if (System.IO.File.Exists(fName))
{
System.IO.StreamReader objReader = new System.IO.StreamReader(fName);
do
{
textLine = objReader.ReadLine();
if (textLine != "")
{
splitLine = textLine.Split(',');
if (splitLine[0] != "" || splitLine[1] != "")
{
accountsDataGridView.Rows.Add(splitLine);
}
}
} while (objReader.Peek() != -1);
}
return true;
}
catch (Exception ex)
{
if (ex.Message.Contains("The process cannot access the file"))
{
MessageBox.Show("The file you are importing is open.", "Import Account", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
MessageBox.Show(ex.Message);
}
return false;
}
}
Przykładowy plik wejściowy:
18906, Y
18908, Y
18909, Y
18910, Y
18912, N
18913, N
Potrzebujesz porady na temat optymalizacji tego kodu do szybkiego odczytu i wyświetlania w sieci.