Я создаю файл CSV из представления SQL Server с помощью Powershell, чтобы пользователи могли загрузить его с нашего веб-сайта ASP Web Forms:
Сценарий Powershell:
Push-Location $PWD;Import-Module -Name SQLPS;Invoke-Sqlcmd -Query 'SELECT 1' ` -Database *** ` -username '***' -password '***' -Server localhost |Out-Null;Pop-Location;Invoke-Sqlcmd -Query 'query here' ` -Database *** ` -username '***' -password '***' -Server ***| Export-Csv -NoTypeInformation ` -Path 'C:\****\products.csv' ` -Encoding UTF8;
Код C #:
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript(powerShellScript);
Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
}
В представлении 71784 строки, размер файла CSV составляет 12 МБ.Это занимает около 15 секунд, а загрузка ЦП увеличивается на 40% при генерации файлов с сайта веб-форм.
Когда тот же сценарий запускается непосредственно из консоли Powershell, кажется, что виновником на самом деле является Powershell:
Очевидно, что он не подходит для производства.У нас есть сотни пользователей, которым потребуется сгенерировать этот файл с некоторыми конкретными параметрами для каждого пользователя (я не могу обслуживать один и тот же файл).
Пока я пытался:
Thread thread1 = new Thread(builder.GenerateCsvFile);
thread1.Priority = System.Threading.ThreadPriority.Lowest;
thread1.Start();
IЯ не уверен, что использование Thread - это хорошая идея, во всяком случае, использование CPU примерно одинаково при использовании Thread.Любой совет, как уменьшить использование процессора с кодом C #?ИЛИ какой-либо другой подход с низким использованием ресурсов к этому?