728x90

엑셀 내보내기가 속도가 너무 느리다는 답변을 보고 다시 테스트를 해봤다.

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;  // 비정상적인 상황(예외)이 발생한 경우 이를 알리는 데 사용
    }
}


728x90

'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
블로그 이미지

Link2Me

,