小编Cha*_*ynt的帖子

dot-sourcing 比仅仅读取文件内容慢吗?

我编写了一个 PowerShell 模块,它从不同的源文件(即每个函数一个 .ps1 文件)中提取函数定义。这使我们(作为一个团队)可以并行处理不同的功能。模块(.psm1 文件)获取可用的 .ps1 文件列表...

$Functions = Get-ChildItem -Path $FunctionPath *.ps1
Run Code Online (Sandbox Code Playgroud)

...然后遍历列表并通过点源引入每个函数定义:

foreach($Function in $Functions) {
  . $Function.Fullname                                     # Can be slow
}
Run Code Online (Sandbox Code Playgroud)

问题:我们注意到,完成的速度可能会有很大差异,大约 50 个源文件的时间从 10 秒到 180 秒不等,这取决于我们测试的机器。我们无法解释所用时间的巨大差异,并且相信我们已经控制了诸如机器类型、操作系统、用户帐户、管理员权限、PS 配置文件、PS 版本等变量。在同一主机上,相同的主机所用的时间可能会有所不同。用户从一天到下一天。

我们确实想知道这是否是磁盘访问的问题,并测试了我们从磁盘读取数据的速度。事实证明,运行Get-Content所有这些文件的速度非常快,我们在解决问题的方法中利用了这一点:

foreach($Function in $Functions) {
  Invoke-Expression (Get-Content $Function.Fullname -Raw)  # Is quick
}
Run Code Online (Sandbox Code Playgroud)

为什么通过点源添加这些函数比读取和执行文件内容慢得多?

performance powershell

13
推荐指数
1
解决办法
806
查看次数

标签 统计

performance ×1

powershell ×1