2013-04-15 3 views
0

Я пытался распараллелить EPPlus, используя многопоточность. Я попытался создать 20 потоков, каждая из которых генерирует 1000 листов с 10 столбцами и 26 строками. Программа потребляла память до 1,8 ГБ и выдавала исключение из памяти.EPPlus multi-threading получает исключение из памяти

Кто-нибудь знает, как это решить?

спасибо.

+0

Как выстрел в темноте, ваша программа составлена ​​для 32 -битный или 64-битный? –

+0

Это исправлено для «Any CPU», но я запускаю его на 32-битной ОС. Есть идеи? – jxnim

+0

Можете ли вы разместить свой код? Недостаточно информации, чтобы придумать другие предложения. –

ответ

0

Это простая программа, которую я пытался сделать это в многопоточной, но я получил «из памяти» исключение:

   class Program 
       { 
        private static int fileID=0; 
        static void Main(string[] args) 
        { 
         List<Thread> threadPool = new List<Thread>(); 
         int threadCount = 20; 


         for(int i=0;i<threadCount;i++) 
         { 
          System.Threading.Thread reportThread = new System.Threading.Thread(() => GenerateThousandSheets()); 
          threadPool.Add(reportThread); 
          reportThread.Start(); 
         } 

         threadPool.ForEach(x => x.Join()); 
         Console.WriteLine("Finished!"); 
         Console.ReadKey(); 
        } 


        private static void GenerateThousandSheets() 
        { 
         FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample6.xlsx"); 
         ExcelPackage pck = new ExcelPackage(newFile); 

         ExcelWorksheet ws = pck.Workbook.Worksheets[0]; 

         for(int x= 0;x<1000;x++) 
         { 
          int newPosition = ws.Index + x; 
          pck.Workbook.Worksheets.Copy("Template","Sheet"+x); 
         } 

         FileInfo outputFile = new FileInfo(outputDir.FullName +fileID+ "-output.xlsx"); 
         pck.SaveAs(outputFile); 
         counter++ 
        } 
       } 
Смежные вопросы