2012-01-08 3 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 раз. Как только я добавлю Threadpool, этот цикл будет очень быстрым. Поэтому Threadpool срабатывал 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

Попробуйте с помощью ThreadPool, MSDN Thread Pool Class Description

+0

Использовал threadpool. Но цикл быстро развивается и обрабатывается 180 записей с 9000. – JinDeveloper

+0

Это источник вашей проблемы, вы превысили доступные системные ресурсы. Пул потоков должен быть более эффективным, поскольку вы не создаете новые потоки. Попробуйте просмотреть [GetMaxThreads] (http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx) и [SetMaxThreads] (http://msdn.microsoft.com/ru -us/library/system.threading.threadpool.setmaxthreads.aspx) Методы –

+0

Я добавил код, который вызывает эту проблему. Спасибо за помощь! – JinDeveloper