c#二维数组大量数据采用多线程导出excel速度优化,代码示例
时间: 2024-02-21 15:10:54 浏览: 131
以下是一个简单的C#代码示例,演示如何使用多线程导出Excel:
```csharp
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using OfficeOpenXml;
public class ExcelExporter
{
private readonly int threadCount; // 线程数
private readonly int batchSize; // 每个线程处理的数据块大小
private readonly int rowCount; // 数据行数
private readonly int columnCount; // 数据列数
private readonly string[,] data; // 二维数组数据
private readonly string filePath; // Excel文件路径
public ExcelExporter(int threadCount, int batchSize, int rowCount, int columnCount, string[,] data, string filePath)
{
this.threadCount = threadCount;
this.batchSize = batchSize;
this.rowCount = rowCount;
this.columnCount = columnCount;
this.data = data;
this.filePath = filePath;
}
public void Export()
{
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("Data");
var taskList = new List<Task>();
for (int i = 0; i < threadCount; i++)
{
var startIndex = i * batchSize;
var endIndex = Math.Min(startIndex + batchSize, rowCount);
var task = Task.Factory.StartNew(() =>
{
for (int j = startIndex; j < endIndex; j++)
{
for (int k = 0; k < columnCount; k++)
{
worksheet.Cells[j + 1, k + 1].Value = data[j, k];
}
}
});
taskList.Add(task);
}
Task.WaitAll(taskList.ToArray());
package.SaveAs(new System.IO.FileInfo(filePath));
}
}
}
```
在上面的代码中,我们创建了一个ExcelExporter类,它接受线程数、数据块大小、二维数组数据和Excel文件路径等参数,并使用多线程方式将数据写入Excel文件。在Export方法中,我们首先创建了一个ExcelPackage实例,并添加了一个名为“Data”的工作表。然后,我们使用Task.Factory.StartNew方法创建了多个任务,每个任务负责处理一个数据块。任务使用嵌套的循环遍历数据块并将数据写入Excel。最后,我们使用Task.WaitAll方法等待所有任务完成,然后将Excel文件保存到指定路径。
请注意,上面的代码示例仅用于演示多线程导出Excel的基本思路,实际应用中可能需要根据具体情况进行调整和优化。
阅读全文