设为首页 收藏本站
查看: 1532|回复: 0

浅谈---测试Native Windows Command与Native PowerShell Command的效率高低

[复制链接]

尚未签到

发表于 2018-9-3 10:39:29 | 显示全部楼层 |阅读模式
原文地址:http://bbs.winos.cn/thread-20150-1-1.html  发表此文的原因是由于本人在阅读ghjcona兄写的PowerShell笔记中,其中有一篇谈到Native Windows Command的话题所引发的。  话题如下:
引用:
这比使用WMI的Win32_PingStatus简洁多了,当然你要是问为什么不使用直接使用Ping(还有比如dir,del,findstr 等Windows Native Command)呢?
首先我们来看看什么叫做Native Windows Command,引用由我的朋友 Edengundam 大哥所写的一段话(具体也可以去MS的KB里搜索相关内容),内容如下: 引用:
Native Windows Command  我不知道应该这个东西用什么名字. 这类命令在Windows世界大量存在, 譬如: dir, findstr, del, ping. 这些命令就是Windows之前的可执行文件(非.Net命令行可执行文件). 在PowerShell中调用这些命令效率是最低的, 因为执行他们PowerShell需要创建一个新进程. 此外因为这些命令早于PowerShell, 因此他们的信息输出都是基于文本的(也可以说是字符串), 因此丧失了PowerShell对对象的处理能力. 因此, 如果你知道PowerShell的实现, 就避免使用这些命令.
(补:关于Native Windows Command到底该翻译成什么意思,我与Edengundam的讨论觉得应翻译为“Windows内置(本地)命令”,最后我在MS官方直译文章中看到MS将Native Windows Command翻译为“Windows原生命令”)  本着科学探索的原则^_^ 我们来测试下Native Windows Command是不是真的比Native PowerShell Command执行效率低呢?
  我们先建立两个交互式脚本(严格的讲并非是脚本,我在这姑且用脚本一词)文件。
  两个脚本文件名为:dos_ping.ps1  和 ps_ping.ps1
  dos_ping.ps1内容如下:(也就是我们之前说的Native Windows Command)
复制内容到剪贴板 代码:
ping 127.0.0.1ps_ping.ps1 内容如下:(PowerShell的调用对象) 复制内容到剪贴板 代码:
$ping = New-Object System.Net.NetworkInformation.Ping  $ping.send("127.0.0.1")
接下来我们建立一个主测试PowerShell脚本文件:start_ping.ps1  start_ping.ps1内容如下:
复制内容到剪贴板 代码:
Write-Host "=============================="  Measure-Command {C:\ps_ping.ps1} | findstr "TotalSeconds" | Format-list
  Measure-Command {C:\dos_ping.ps1} | findstr "TotalSeconds" | Format-list
  Write-Host "=============================="
  Measure-Command {C:\ps_ping.ps1} | findstr "TotalSeconds" | Format-list
  Measure-Command {C:\dos_ping.ps1} | findstr "TotalSeconds" | Format-list
  Write-Host "=============================="
  Measure-Command {C:\ps_ping.ps1} | findstr "TotalSeconds" | Format-list
  Measure-Command {C:\dos_ping.ps1} | findstr "TotalSeconds" | Format-list
  Write-Host "=============================="
补:Measure-Command是一个度量命令,它的作用是获取命令所执行的时间。为了便于观察,在这里我还用了findstr性质提取"TotalSeconds" 总的使用时间。  好了,三个必备文件都准备好了,接下来我们执行start_ping.ps1看看结果如何:

  经过三次测试比较,在PowerShell中使用Native Windows Command所花费的总时间远远高于Native PowerShell Command。
  那为什么Native Windows Command的所用时间那么高呢, 因为执行他们PowerShell需要创建一个新进程。而PowerShell Command则不需要。 (如下图:在执行单纯的Native Windows Command时在任务管理器中启动了ping.exe进程)

  所以也就证实了,在PowerShell中调用Native Windows Command的效率远低于Native PowerShell Command。
  这里只是对于Native Command执行效率的一个小小的数据测试说明,有不到之处还望指出。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561942-1-1.html 上篇帖子: 推荐软件:PowerShell Plus 下篇帖子: GUI-PowerShell & PowerShell WMI explorer
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表