2011-01-25 10 views
1

私のアプリケーションでは、以下のようにデータセットと4つのメソッドを使用しています。同時に異なるメソッドを実行するにはどうすればよいですか?

Dataset ds=new Dataset(); 
ds=businesslogiclayerObject.method1(a,b,c,d); 
ds=businesslogiclayerObject.method2(a,b,c,d,e); 
ds=businesslogiclayerObject.method3(a,b,c,d,e,f); 
ds=businesslogiclayerObject.method4(a,b,c,d,e,f,g,h); 

(A、B、C、D、E、F、G、H)は、ビジネスロジックレイヤでストアドプロシージャのパラメータです。今までは、スレッド化コンセプトを実装していないので、1つずつ実行しています。これは、データセットで結果セットを取得するのに時間がかかります。

上記の4つの方法を同時に実行するにはどうすればよいですか?

私を助けてください。

よろしく、 N.SRIRAM

+0

利用コードで行の先頭に4つのスペースそれらに書式設定を適用します。これにより、すべての人があなたの質問を読むのが容易になります。 – Kendrick

答えて

0

.NET 3を使用しているので、BackgroundWorkerを使用することができます。これは、マーシャリングの手間をUIスレッドに戻し、他のスレッドの複雑さを軽減するためです。しかし、ロックの世話はしません。したがって、必要に応じてロッキングアスペクトに対処してください。

BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork += new DoWorkEventHandler(OnGrabData); 
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OnGrabDataCompleted); 
worker.RunWorkerAsync(new DataClass(a,b,c,d,e,f,g)); 

DataClassは、あなたのストアドプロシージャが、次にアクセスするか、おそらくあなたは、その後BackgroundWorker以内に呼び出すことができるパラメータでdelegateを渡すことができ、あなたのパラメータをカプセル化することができます。どちらの方法でも、この例では、単純なスレッド動作を提供するにはBackgroundWorkerで十分です。

0

あなたの「businesslayerは、」SQLのいくつかの並べ替えを実行し、使用すると、1つのバッチですべてのSQL-文を実行することを書き換えることができ、データセットを返す場合、個別のSQL/sproc呼び出しを個別に実行する。

result-datasetには、別々のsqlごとにデータテーブルがあります。

0

まず、考えるいくつかあります:メソッドは、実際に

  • 同時に実行することはありません

    1. が総実行時間は おそらく を順次実行したときよりも大きくなります。
    2. 実行の順序 は関連性がある場合は、評価する必要があります。

    これは問題ではありません(たとえば、バックグラウンドでコールを処理したい場合など)。いくつかのオプションがあります。最も簡単なのはおそらくThreadPool.QueueUserWorkItem()を使用するか、BackgroundWorkerを使用してスレッドプールを使用している可能性があります。

    あなたの正確なニーズに応じて、リストや辞書に必要なパラメータをキャプチャし、または別々の状態オブジェクトを定義して、のような何かができる:

    Dictionary<string, object> parameters = new Dictionary<string, object> 
    parameters.Add("a", 42); 
    parameters.Add("b", new object()); 
    parameters.Add("c", null); 
    ThreadPool.QueueUserWorkItem((state) => { do stuff with "state" }, parameters);. 
    
  • 関連する問題