2012-01-08 7 views
1

問題は、プログラムが例外をスローすることです。複数のスレッドを作成した後。どのようにしてループ内で作成されるスレッドの数を制限できますか?OutOfMemoryExceptionマルチスレッドc#

for (int jrCnt = rCnt; jrCnt <= arrayTable.GetUpperBound(0); jrCnt++) 
       { 
        /* bla bla bla */ 

        if ((!string.IsNullOrEmpty(prcI.name)) && 
         (prcI.prc != 0)) 
        { 
         /*bla bla bla*/ 

         var thread = // run updade or add 
                new Thread(() => 
                { 

                 if (!Accessor.AddProductUpdateProduct(prcI)) _updateCounter++; 
                 _countadd++; 

                }); 
         thread.Name = "Add_or_update-no_" + thread.ManagedThreadId; 
         thread.Priority = ThreadPriority.Lowest; 

         thread.Start(); 
        } 

いくつかの明確化。

ループはn回目の先頭から始まります。スレッドプールを追加すると、このループは非常に高速です。したがって、スレッドプールは180回トリガされました。私は英語を謝ります。

for (int i = sbook; i < book; i++) 
      { 
       dt = Accessor.ImporterXls(_path, i);// array for method 

       ConstructWithBook(dt, rCnt, sbook, book, priceSelect, nametov, pricetov, 
           categorytov); 
      } 
+0

はあなたがここにいくつかのコンテキストを提供し、より具体的に言葉あなたの質問をする必要が使用してみてください。今すぐあなたの質問に直接答えて、私はThread.Startを削除すると言うでしょう。 – diggingforfire

+0

私は別のスレッドで実行されるコードをしたい。私はプログラムをスピードアップするためにそれが必要です。このループは9000レコードを処理します。したがって、多くのスレッドを作成し、十分なメモリがない。 – JinDeveloper

答えて

1
+0

スレッドプールを使用しました。しかしサイクルは速いペースで処理され、9000から180レコードが処理されます。 – JinDeveloper

+0

これは問題の原因です。利用可能なシステムリソースを超えています。新しいスレッドを作成していないため、スレッドプールの方が効率的です。 [GetMaxThreads](http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx)を見てみて、[SetMaxThreads](http://msdn.microsoft.com/en -us/library/system.threading.threadpool.setmaxthreads.aspx)メソッド –

+0

この問題の原因となるコードを追加しました。助けてくれてありがとう! – JinDeveloper