EPPlus多线程获得“内存不足”异常

时间:2013-04-15 06:01:28

标签: multithreading memory out-of-memory epplus

我试图通过使用多线程来并行化EPPlus。我尝试生成20个线程,每个线程生成1000张10列和26行。该程序消耗的内存高达1.8GB,并引发了“内存不足”异常。

有谁知道如何解决这个问题?

谢谢。

2 个答案:

答案 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++
                    }
                }

答案 1 :(得分:0)

如果您的操作系统是32位,那么一个可执行文件最多可以使用2GB。 事实上,1.8GB真的接近这个门槛。 当您使用Paralle.ForEach使用不同的处理器关联时,在您的机器上使用64位操作系统,或者产生更少的线程或使用更少的线程