0

最近、テキストファイルへの100000行の書き込みとデータベースへの100000挿入の速度の違いをテストするアプリを作成しました

これがコードの核心です

    private void RunTestBtn_Click(object sender, RoutedEventArgs e)
    {
        Stopwatch FFtimer = new Stopwatch();
        FFtimer.Start();
        RunFFTest();
        FFtimer.Stop();
        TimeSpan FFts = FFtimer.Elapsed;
        string FFelapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        FFts.Hours, FFts.Minutes, FFts.Seconds,
        FFts.Milliseconds / 10);
        FFLabel.Content = "Flat File: " + FFelapsedTime;

        Stopwatch Datatimer = new Stopwatch();
        Datatimer.Start();
        DataFFTest();
        Datatimer.Stop();
        TimeSpan Datats = Datatimer.Elapsed;
        string DataelapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        Datats.Hours, Datats.Minutes, Datats.Seconds,
        Datats.Milliseconds / 10);
        DBLabel.Content = "Database: " + DataelapsedTime;

    }
    void RunFFTest()
    {
        using(StreamWriter writer = new StreamWriter(@"F:\test\FFtest.txt"))
        {
            for(int i = 0; i< 100000; i++)
            {
            writer.WriteLine("test");
            }

        }
    }

    void DataFFTest()
    {
        using (SqlConnection conn = new SqlConnection("Data Source=EMMY;Initial Catalog=MyDB;User Id=SqlServiceUser;Password=MyPassword;"))
        {
            conn.Open();
            for (int i = 0; i < 100000; i++)
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "INSERT INTO TestTable VALUES ('Test')";
                    cmd.ExecuteNonQuery();
                }
            }
        }

    }

最終的な結果として、フラットファイルの書き込みには1ミリ秒かかり、SQL挿入には9分41秒かかりました。データベースに時間がかかることはわかっていますが、これを高速化する方法はありますか?

4

2 に答える 2

2

可能なオプション..。

  1. トランザクションを使用する(トランザクションごとに複数の挿入を行う)

  2. SqlBulkCopyAPIを使用する

于 2012-11-19T15:54:31.233 に答える
0

はい、多数ではなく、単一の挿入ステートメントとして実行してください。

INSERT INTO TestTable VALUES ('Test'), ('Test'), ('Test') ....";
于 2012-11-19T15:54:09.170 に答える