2011-11-12 10 views
2

MSSQLへのアクセスが必要なマルチスレッドアプリケーションがあります。私は、静的メソッドを持つクラスを作成しました。各メソッドは次のようになります。マルチスレッドアプリケーションの静的クラス/メソッド

public static int [] Login(string [] LoginDetails) 
    { 
     using (SqlConnection connection = new SqlConnection(CS)) 
     { 
} 

これは間違いありませんか?私はマルチスレッドでは経験はありませんが、各スレッドは変数でこの静的メソッドの "コピー"を実行し、共有されないと思います。クラスレベルで静的メンバー(sqlConnectionなど)を宣言し静的にすると、共有されるため、同時アクセスの問題が発生します。

+1

「こうして」何?上記の変数 'connection'は、実行された各メソッドに対してローカルになりますが、それは正しいです。 – bzlm

+0

私の意見では、このメソッドは静的である必要はありません。この場合、データベースエンジンは並列性を処理して最適化するように設計されており、複数の接続やすべてを処理するため、この場合のスレッドについては心配しないでください。 –

答えて

3

メソッド自体をコピーしているわけではありませんが、各メソッドの呼び出し(再帰的に同じスレッドか異なるスレッドかにかかわらず)は実際に別のローカル変数セットを取得します。

ここではデータのどれもがスレッド間で変更可能な方法で共有されていない限り、正常であるはずです。

(さておき、それはスペースを入れずに、名前と並ん型の配列の一部を含む多くの慣用的だと - 。そうint[]の代わりに、int []

関連する問題