엑셀 내보내기가 속도가 너무 느리다는 답변을 보고 다시 테스트를 해봤다.
4만개의 데이터를 CSV 로 내보내기하는데 2초가 걸리지 않았다.
엑셀 내보내기를 했더니 무려 11분 12초가 걸렸다.
엑셀 내보내기 로직은 더 좋은 로직을 찾아보고 구현해야 할 거 같다.
PHP 에서 내보내기 테스트를 해봤을 때도 for 문 특히 2중 for 문을 사용하면 속도가 매우 느렸다.
하지만 while 문을 사용하면 속도가 엄청 빨랐다.
private void Save_ExportToCSVFile(string fileName, DataGridView dgv, bool elapsedtime)
{
string delimiter = ";"; // 구분자
FileStream fs = new FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
StreamWriter csvExport = new StreamWriter(fs, System.Text.Encoding.UTF8);
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); // 동작시간 체크
if (elapsedtime == true)
{
sw.Start();
}
using (var myConn = new MySqlConnection(ConnectionString))
{
myConn.Open();
string strqry = "select 칼럼명 from 테이블명 Where 조건문 ";
using (var cmd = new MySqlCommand(strqry, myConn))
{
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
// 파일로 저장할 정보 기록
csvExport.Write(reader.GetString(0)); csvExport.Write(delimiter);
csvExport.Write(reader.GetString(1)); csvExport.Write(delimiter);
csvExport.Write(reader.GetString(2)); csvExport.Write(delimiter);
csvExport.Write(reader.GetString(3));
csvExport.WriteLine();
}
}
else
{
MessageBox.Show("데이터가 없습니다");
}
}
}
myConn.Close();
}
csvExport.Flush(); // flush from the buffers.
csvExport.Close();
fs.Close();
if (elapsedtime == true)
{
sw.Stop();
MessageBox.Show("소요시간 : " + sw.Elapsed.ToString() + " 이고 CSV 파일 저장완료");
}
else
{
MessageBox.Show("CSV 파일이 저장되었습니다");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw; // 비정상적인 상황(예외)이 발생한 경우 이를 알리는 데 사용
}
}
'C# > C# SQL' 카테고리의 다른 글
C# MySQL 엑셀로 내보내기 (0) | 2016.08.28 |
---|---|
C# MySQL Update (0) | 2016.08.22 |
C# MySqlDataReader Format (0) | 2016.01.28 |
C# SQLite 데이터 삭제 (transaction 반영) (0) | 2016.01.14 |
C# SQLite dataGridView1 에 Select (0) | 2016.01.14 |