0

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

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

谢谢你。

4

2 回答 2

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++
                    }
                }
于 2013-04-17T08:26:03.413 回答
0

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

于 2018-05-03T09:15:23.700 回答