我试图通过使用多线程来并行化 EPPlus。我尝试生成 20 个线程,每个线程生成 1000 张 10 列和 26 行的表。该程序消耗了高达 1.8GB 的内存并引发了“内存不足”异常。
有谁知道如何解决这个问题?
谢谢你。
我试图通过使用多线程来并行化 EPPlus。我尝试生成 20 个线程,每个线程生成 1000 张 10 列和 26 行的表。该程序消耗了高达 1.8GB 的内存并引发了“内存不足”异常。
有谁知道如何解决这个问题?
谢谢你。
这是一个简单的程序,我尝试在多线程中执行,但出现“内存不足”异常:
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++
}
}
如果您的操作系统是 32 位,那么单个可执行文件最多可以使用 2GB。事实上,1.8GB 确实接近这个门槛。使用具有更多 RAM 的 64 位操作系统,或者在使用 Paralle.ForEach 使用不同的处理器亲和性时产生更少的线程或使用更少的线程