• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >PowerShell > PowerShell脚本性能优化技巧总结

PowerShell脚本性能优化技巧总结

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了powershell脚本,powershell脚本下载,powershell脚本代码,powershell执行脚本,powershell 运行脚本等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

最终优化

在你写脚本时,不要老是想着去优化,因为你的部分优化代码可能最终被丢弃。而且老是想着优化也会降低你的生产效率,因为和CPU的时间相比,脚本编写者的时间可能会更宝贵。

使用过滤参数

PowerShell可能会消耗很多资源,因为许多Cmdlet本身的设计就是用来提供数目很大的数据。所以,如果你使用的Cmdlet命令支持-Filter, -Include, 和 -Exclude这样的过滤条件,就尽量使用它们。

首先如果一条命令支持-Filter 过滤器参数,那就说明这里可能隐藏着一个对象访问API。使用过滤,可能会让代码执行得非常快,因为通常会在对象被创建之前就执行过滤。相反一条命令支持-Include, 和 -Exclude,这样的过滤会发生在对象被创建后,对象进入管道之前。所以后者的效率比-Filter 要低。尽管如此,使用-Include, 和 -Exclude后,让部分对象不进入管道,速度也是非常快的。

有时,应当使用更多的类型去过滤。比如你想搜索D盘下所有的后缀名为htm的文件。我们应当会使用*.htm作为过滤-Filter条件,PowerShell使用传统的文件系统通配符,仅会返回所有匹配到的文件对象。这样效率很高,因为这种简单模式匹配,Windows API本身在底层就实现了。然而Windows API本身也有许多限制,因为它太老了,它会忽略文件后缀名中除了htm这三个字符以外的所有字符。所以即使有Html这样后缀名它也会返回。所以此时,我们需要-filter和-include双剑合璧,打败金轮法王。

减少资源的占用

性能的优化包括降低时间复杂度和空间复杂度,但是很多时候,鱼和熊掌不可兼得。你只能选择其一。举个例子吧:比如你想列出D盘下所有的文件,然后针对每个文件做点事情,你可能会使用ForEach-object来变量整个集合中的文件系统对象:

另外一种方法,你可能会使用Foreach循环:

Foreach循环比ForEach-Object,执行速度快,消耗的内存多。但是如果你能确定你要处理的数据规模不是很大,Foreach循环当然是上上之选。

使用Sleep降低CPU的使用率

接触很多对象的PowerShell脚本,通常会执行很长时间,对于处理器也不会怜香惜玉。现在单核CPU已成往事,在多核的今天这可能不是个事,但这仍旧可能会导致系统花费了大量时间去等待。如果你的脚本消耗了很多CPU周期,或者需要等待事情发生,你可以使用Start-Sleep这条命令来降低处理器的使用率。默认Slee是按秒来等待的,这肯定受不了,你可以设置一个毫秒级别的暂停。始终的分辨率不超过10到20毫秒会更好(再小就没有意义了),所以你可以指定最小暂停时间为20毫秒。

另外你可能不想让你的脚本每个循环周期中都Sleep,只让部分周期Sleep,以给CPU腾出时间去做其它事。下面的脚本会借助操作符%取模来保证每10轮暂停一次:

简单的优化方案

你可以把这些小技巧归纳成一个统一的优化方案。首先,别急着优化直到脚本写完了。接着,使用Filter过滤来减少限制返回对象的数目,然后再用-include和,-exclude进行微调,这样做既会减少运行时间,也会降低资源的使用率。基于这一点,如果你的数据量比较大,就使用Foreach循环来代替Foreach-Object,这样会让你的脚本执行效率提高。当然如果你的数据规模到了10万级以上,这可能会引入新的性能问题。最后,如果你发现自己的脚本CPU占用率老高老高,看看能否在一些循环中使用Start-Sleep命令,来放松一下。

</div>

您可能想查找下面的文章:

  • PowerShell因为在此系统中禁止执行脚本的解决方法
  • PowerShell时间记录脚本
  • Powershell实现编写和运行脚本
  • PowerShell脚本反引号用法实例:随时随地给代码换行
  • Powershell脚本的4种执行权限介绍
  • PowerShell中获取当前运行脚本路径的方法
  • PowerShell实现动态获取当前脚本运行时消耗的内存
  • PowerShell实现的文件同步脚本分享
  • Powershell实现获取电脑序列号功能脚本分享
  • Powershell脚本中使用条件断点实例

相关文章

  • PowerShell中使用return语句退出函数例子
  • Powershell小技巧之使用WMI测试服务响应
  • PowerShell脚本中控制Windows DNS服务的方法
  • Powershell小技巧之删除不规则字符
  • 用PowerShell删除N天前或指定日期(前后)创建(或修改)的文件
  • Powershell小技巧之获取字符串的行数
  • 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
  • Powershell从注册表中查询默认MAPI客户端的例子
  • PowerShell脚本开发之收发TCP消息包
  • 探索PowerShell(九) 条件控制、逻辑

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • PowerShell中编程清空IE缓存方法
    • PowerShell中的强类型数组介绍
    • Powershell小技巧之删除不规则字符
    • PowerShell中常用的一些特殊运算符介绍
    • PowerShell查询和删除打印任务操作代码实例
    • PowerShell比较文本文件的两个方法
    • PowerShell函数中限制数组参数个数的例子
    • 简单谈谈PowerShell 4.0中的新命令
    • PowerShell脚本监控文件夹变化实例
    • Powershell小技巧之轻松从网上下载文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有