Я использую библиотеки NPOI .NET для добавления данных, возвращаемых веб-службой, в документ Excel.По сути, моя программа считывает 25 000 записей из документа Excel в C # List, отправляет данные в виде входных данных в запрос веб-службы, а затем сохраняет возвращаемые данные в документе Excel на 5 различных листах.Я замечаю, что скорость обработки и производительность моей программы экспоненциально снижаются, поскольку в выходной документ Excel добавляется больше данных.Я запустил анализ кода в своем приложении, и C # обнаружил, что 30% ЦП выделяется для функции, описанной ниже, особенно строк, которые считывают данные из моего выходного документа и записывают данные в него.Приведенная ниже функция вызывается каждый раз, когда веб-сервис возвращает успешный ответ.(это вызывается 5 раз за ответ).
Как можно переписать приведенную ниже функцию для повышения производительности моего приложения?
public static void AppendToExcelFileNPOI(string
filePath, int sheetIndex, List<string> contents)
{
FileStream fileWriter = null;
ISheet sheet = null;
try
{
if (!File.Exists(filePath))
{
CreateExcelOutputFile(filePath);
}
FileStream fileReader = new
FileStream(filePath, FileMode.Open,
FileAccess.Read);
XSSFWorkbook workbook = new
XSSFWorkbook(fileReader); //XSSFWorkBook will write to 2007 Excel format
sheet = workbook.GetSheetAt(sheetIndex); //Get the Excel Sheet specified by the integer stored in sheetIndex
int indexOfLastRow = sheet.LastRowNum;
IRow worksheetRow =
sheet.CreateRow(indexOfLastRow+1);
int column = 0;
foreach(var value in contents)
{
ICell cell =
worksheetRow.CreateCell(column);
cell.SetCellValue(value);
sheet.AutoSizeColumn(column);
column++;
}
fileWriter = new FileStream(filePath,
FileMode.Create);
workbook.Write(fileWriter);
}
catch (IOException)
{
MessageBox.Show($"The file {filePath} is
opened by another program or process." +
" Please close the file and
restart the batch process.", "Critical
Warning",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (fileWriter != null)
{
fileWriter.Close();
}
}
}