編集:
私の問題はもう問題ではありません: パフォーマンス テストをやり直しましたが、致命的な愚かなエラーが発生しました: ミリ秒から秒を取得するために x1000 を忘れていました :/ 申し訳ありません。
情報:
- PC からローカル ネットワーク上のデータベース サーバーに 1 秒あたり約 1900 の更新を行っています。
- プログラムが DB と同じマシン上にある場合、毎秒 3.200 の更新。
- データベース サーバー上の PC から 1 秒あたり 3.500 の更新 新しい SQLConnection を再作成して再度開くことはありません。
- バッチ テキストで 1 秒あたり 5.800 の更新。私の 10.000 行の場合、5 秒かかる場合、私のプログラムでは問題ありません。ご心配をおかけして申し訳ありません。
実際には、SQL ストアド プロシージャを使用してデータベースに行を作成し、SQL インジェクションを回避しています。C# では、次のメソッドがあります。
public void InsertUser(string userCode)
{
using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
{
SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
}
}
挿入する行が 1 つまたは 2 つある場合に最適です。しかし、1,000 人のユーザーと 10,000 の製品と 5,000 のペットを作成する必要がある場合、それは最善の解決策ではありません。ネットワーク トランスポートで膨大な時間を失うことになります。
チェックインしなくても、限られた量のコールバックしか使用できないと思います。だから私は10.000回呼び出したくありません:
sqlCommand.BeginExecuteNonQuery()
もう 1 つの方法は、バッチ テキストを作成することですが、SQL インジェクションのリスクがあります (それは醜いです)。
.Net でそれを管理する「SqlCommandList」オブジェクトはありますか? データベースに大量の書き込みを行うにはどうすればよいですか? そのための良いパターンは何ですか?