2012-01-08 2 views
1

문제는 프로그램에서 예외가 발생한다는 것입니다. 여러 스레드를 작성한 후. 루프에서 만들 스레드 수를 어떻게 제한 할 수 있습니까?OutOfMemoryException multithreading 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
+0

스레드 풀을 사용했습니다. 그러나주기가 빠르며 9000에서 180 레코드를 처리했습니다. – JinDeveloper

+0

문제의 원인은 사용 가능한 시스템 리소스를 초과하는 것입니다. 새 스레드를 만들지 않으므로 스레드 풀이 더 효율적이어야합니다. [GetMaxThreads] (http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx) 및 [SetMaxThreads] (http://msdn.microsoft.com/ko/ko)를보십시오. -us/library/system.threading.threadpool.setmaxthreads.aspx) 방법 –

+0

이 문제를 일으키는 코드를 추가했습니다. 도와 주셔서 감사합니다! – JinDeveloper