我有一个运行以下代码的代码:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string path = txtPath.Text;
var workbook = new XLWorkbook(path);
var worksheet = workbook.Worksheet(txtWorksheet.Text);
var cells = worksheet.Range(txtMinRange.Text+":"+txtMaxRange.Text).Cells();
foreach (var c in cells)
{
if (c.Value == "")
{
c.Value = "-";
}
else
{
c.Value = c.Value;
}
}
workbook.SaveAs("RowCells.xlsx");
workbook.Dispose();
}
它的作用是,它将excel文件中给定范围的所有空白单元格更改为短划线“ - ”并将其保存到另一个名为RowCells的文件中。
然而,在查看内存使用情况时,它会持续升高,直到应用程序进入中断模式。
如何保持内存使用率下降?
答案 0 :(得分:0)
代码看起来应该有效,但您的输入电子表格可能非常大。 无论如何,我不知道ClosedXML如何在内部工作,但它可能会保留一个已更改单元格的列表。由于您要更改范围中的每个单元格(可能会变得非常大),因此您应该只更改需要更改的单元格。做这样的事情:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string path = txtPath.Text;
var workbook = new XLWorkbook(path);
using (var worksheet = workbook.Worksheet(txtWorksheet.Text))
{
var cells = worksheet.Range(txtMinRange.Text+":"+txtMaxRange.Text).Cells();
foreach (var c in cells)
{
if (c.Value == "")
{
c.Value = "-";
}
}
}
workbook.SaveAs("RowCells.xlsx");
workbook.Dispose();
}