【问题标题】:Windows software loading times [closed]Windows 软件加载时间 [关闭]
【发布时间】:2014-08-23 17:04:48
【问题描述】:

有没有办法使用程序找出 Windows 程序 (GUI)(如 MS Word 或 Adob​​e Photoshop)实际加载所需的时间。我了解加载是一个主观问题。想法是找出桌面是否需要注意,或者用户是否面临性能下降。

【问题讨论】:

  • 定义“负载”。您是指流程开始的时间吗?执行第一行代码的时间?或者是时候看到主窗口出现在屏幕上?无论您选择哪种测试方法,请确保您多次运行它(10 次),因为基于 DLL 是否已加载、系统最近是否已重新启动等情况存在很大差异...

标签: windows shell powershell


【解决方案1】:

为命令或任何脚本块计时的常用 Powershell 方法是 Measure-Command,例如:

Measure-Command { Start-Process -FilePath "C:\Program Files\Microsoft Office\Office14\WINWORD.EXE" }

但这只会计算 Powershell 启动新进程所花费的时间,而不是应用程序加载新窗口及其所有界面所花费的时间。

幸运的是,Start-Process 输出的 System.Diagnostics.Process 对象有一个名为 Responding 的属性。 根据this MSDN page,该属性告诉我们关联进程的用户界面是否正在响应系统。

所以我们可以做这个小脚本:

$StartTime = Get-Date
$WordProcess = Start-Process -FilePath "C:\Program Files\Microsoft Office\Office14\WINWORD.EXE" -PassThru
DO
{
Start-Sleep -Milliseconds 1 
} Until ( $WordProcess.Responding -eq $True )
$EndTime = Get-Date
($EndTime - $StartTime).TotalSeconds

-PassThru 允许命令返回我们存储在 $WordProcess 中的 Process 对象。 然后,我们使用这个对象的 Responding 属性来检查它的用户界面是否响应。

DO...Until 循环将在进程响应后立即停止循环。

“Start-Sleep -Milliseconds 1”将为我们提供一毫秒的精度,这对于大多数用途来说应该足够了。

【讨论】:

    【解决方案2】:

    我认为一个简单的解决方案是这个(powershell):

    $datStartTime = Get-Date
    Start-Process -FilePath "C:\Program Files (x86)\Microsoft Office\Office12\WINWORD.EXE" -Wait
    $datEndTime = Get-Date
    ($datEndTime-$datStartTime).TotalSeconds
    

    设置应用程序的路径。 Powershell 启动应用程序。加载时关闭应用程序。
    然后您会看到应用程序需要打开/关闭的时间。

    【讨论】:

    • Start-Process 的 -Wait 将永远等待,直到进程停止。这会强制您停止进程(或关闭窗口)才能继续执行最后 2 行。
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多