我试图通过使用多线程来并行化EPPlus。我尝试生成20个线程,每个线程生成1000张10列和26行。该程序消耗的内存高达1.8GB,并引发了“内存不足”异常。
有谁知道如何解决这个问题?
谢谢。
答案 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位操作系统,或者产生更少的线程或使用更少的线程