我正在使用以下 C# 代码运行 PowerShell 脚本,该脚本在 C# 之外运行时会在一秒钟内运行,但在以下 C# 代码块中运行时间超过 9 秒。C# 代码在同一用户帐户下编译并作为 Windows 服务运行(通过whoami
在 PowerShell 脚本中输出进行测试。)
string csv = jobpath + requesttype[2] + ".csv";
string id = "123321";
var scriptfile = @"c:\jobrunner\jobrunner.ps1";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"powershell.exe";
startInfo.Arguments = @"" + scriptfile + " '" + csv + "' " + " '" + id + "'";
startInfo.RedirectStandardOutput = false;
startInfo.RedirectStandardError = false;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
PowerShell 脚本从如下文件夹加载函数:
$date = get-date
"start $date" >> C:\temp\_log.log
$psdir="c:\Jobrunner\functions"
# load all 'autoload' scripts
Get-ChildItem "${psdir}\*.ps1" | %{.$_}
$date = get-date
"end $date" >> C:\temp\_log.log
任何人都可以指出为什么从 C# 中执行脚本时脚本如此缓慢的方向吗?
结果:(首先从 c# 运行本机第二个)
start 03/28/2015 16:05:13 - end 03/28/2015 16:05:13
start 03/28/2015 16:05:32- end 03/28/2015 16:05:41
使用时性能得到了更好的分配:
startInfo.FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe";
我注意到生成的 powershell.exe 首先尝试了 *32 C:\Windows\SysWOW64\WindowsPowerShell\v1.0 但实际上是 32 位,而 system32 中的 powershell.exe 是 64 位?
现在的区别是:0.5 秒 vs 1.1 秒
任何进一步的性能提升器都非常感谢