2016-07-01 6 views
-1

SqliteCommandの頻度を記述したマニュアルです。そして避けなければならない状況は何ですか?C#でSqliteCommandを使用する

多くの機能を持つこのコードを含む危険性はありますか?

private void UpgradeDataBaseEmptyColumn() 
{ 
    var connection = GetConnection(); 
    { 
     AddColumnIsEmpty(connection); 
     Thread t = new Thread(() => 
      { 
       ProcessIsEmptyColumn(connection); 
      }); 
     t.IsBackground = true; 
     t.Start(); 
    } 
} 

機能AddColumnIsEmpty

private void AddColumnIsEmpty(SQLiteConnection connection) 
{ 
    using (SQLiteCommand command = new SQLiteCommand(connection)) 
    { 
     //SOmething done 
    } 
} 

機能ProcessIsEmptyColumn

public void ProcessIsEmptyColumn(SQLiteConnection connection) 
{ 
    using (SQLiteCommand command = new SQLiteCommand(connection)) 
    { 
     foreach (var item in getEmptyItemsNotUpdated(connection)) 
     { 
      using (SQLiteTransaction transaction = connection.BeginTransaction()) 
      { 
       //Something doe 
       transaction.Commit(); 
      } 
     } 
    } 

機能getEmptyItemsNotUpdated

private List<int> getEmptyItemsNotUpdated(SQLiteConnection connection) 
{ 
    using (SQLiteCommand command = new SQLiteCommand(connection)) 
    { 
     //return idToUpdate; 
    } 
} 
+1

あなたが求めているものを明確にしてください?アプリケーションでは、何百万ものコマンドオブジェクトを使用して、1回の実行でデータベースにクエリを実行できます。あるいはインスタンスの再利用について質問していますか?そうなら、そうしないでください。接続プーリングとは、接続オブジェクトを存続させることにメリットがないことを意味します。コマンドオブジェクトの接続オブジェクトを変更すると混乱することになります。 – Richard

+1

質問を明確にすることはできますか?今は正確に何を求めているのかは不明です。 –

+0

@AndyKorneyev、あなたが正しいのは、広範な問題です。私はいくつかの例を投稿します、たぶんそれは良くなったでしょう。 – A191919

答えて

2

SQLiteConnectionインスタンスが安全なスレッド であることが保証されていないことに注意してください。 は、同じ数の スレッドで同じSQLiteConnectionを同時に使用して、を回避する必要があります。スレッドごとに新しい接続 を開いて、作業が完了したら閉じることをお勧めします。実際には 接続は作成されず、毎回 Pooling = trueで作成/廃棄されません。接続文字列オプション - 接続は 接続プールに格納されます。これによりパフォーマンスが大幅に向上します。

https://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteConnection.html

0

はい、あなたコマンドを再使用しますが、パラメータをクリアしたり、コマンドテキストを変更したりする必要があるので、コマンドを再使用するのは厄介なことがあります。すべての作業を終えるまでには、きれいなオブジェクト。そして、ほとんどのメソッドは1つのことを行うだけなので、複数のシナリオが必要な場合はほとんどありません。

メインコマンドは、同じコマンドを複数回連続して発行したい場合や、コール間でパラメータ値を変更する場合にのみ使用します。 ADO.NETプロバイダによっては、コマンドを再使用することで大きな違い(パフォーマンスの向上)が得られる場合や、実質的に差異が生じない場合があります。

関連する問題