进程内存(MB)不断上升

时间:2017-11-10 08:59:13

标签: c# visual-studio closedxml

我有一个运行以下代码的代码:

    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的文件中。

然而,在查看内存使用情况时,它会持续升高,直到应用程序进入中断模式。

如何保持内存使用率下降?

1 个答案:

答案 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();
}