SQL Server 2008 Expressデータベースを使用して、標準のC#Windowsフォームアプリでカスタムレプリケーション関数を作成しました。基本的に、サブスクライバーデータベースに対して実行する必要のある一連のSQLステートメントを取得します。完全に更新すると、実行する必要のある最大200k以上のステートメントが実行される可能性があります。
以下に示すように、コードブロック内でこれらのステートメントを処理します。
using (SqlConnection connection = ConnectionManager.GetConnection())
{
connection.Open();
SqlTransaction transaction = connection.BeginTransaction();
// Process 200k+ Insert/Update/Delete statements using SqlCommands
transaction.Commit
}
私が見つけたのは、私のアプリケーションのメモリ使用量は、最初の30kステートメントで約40MBとかなり安定しているということです。その後、突然300mb前後にジャンプし、OutOfMemory例外が発生するまで大きくなります。
私が使用している方法は可能ですか?1つのトランザクション内でその多くのステートメントを処理できますか?私はこれができるはずだと思います。もっと良い方法があれば、ここに行きたいです。これはトランザクションである必要があります。そうしないと、部分的なレプリケーションによってデータベースが破損します。
ありがとう。
編集:
コンピューターを再起動した後、200k以上の完全なレプリケーションを実行することができました。レプリケーションが完了した後、ある時点でメモリ使用量が1.4Gbに増加しましたが、メモリ使用量は40MBにまで低下しました。これにより、コマンドを処理するループ内の何かが、おそらくメモリの増加を引き起こしていると結論付けることができます。