浅谈---测试Native Windows Command与Native PowerShell Command哪个效率高

原创 2007年09月16日 14:29:00

注:本篇文章,未在联系作者以及得到许可的情况下, 禁止以任何形式进行转载。

By:Anders      Mail:katrina520@163.com       

发表此文的原因是由于本人在阅读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.1

 

ps_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 "=============================="

Stop
-Process -name notepad

补: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执行效率的一个小小的数据测试说明,有不到之处还望指出。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

How PowerShell Differs From the Windows Command Prompt

How PowerShell Differs From the Windows Command Promptcommand-prompt-vs-powershellYou may have notic...
  • sjyhehe
  • sjyhehe
  • 2015年08月02日 14:34
  • 485

React-Native在Mac系统终端命令出现adb:command not found解决方法

第一种:你的终端输入命令错了。 第二种:没有配置环境 在~/user目录下 1、创建.bash_profile文件 输入命令行touch .bash_profi...

浅谈Java设计模式(十八)命令模式(Command)

前言: 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不...

浅谈JAVA设计模式之——命令模式(Command)

一、概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 二、适用性 1.抽象出待执行的动作以参数化某对象。 2.在不同的时刻指...

如何编写代码才能使得效率高

  • 2008年01月30日 17:16
  • 125KB
  • 下载

Windows下搭建React Native真机测试环境

一、准备1、Java SE安装包 2、Android Studio 4、NodeJS 5、Git for Windows软件说明一下: 我们需要Java开发环境,因为我们这里是开发Androi...
  • p_3er
  • p_3er
  • 2017年04月21日 15:57
  • 542

关于web app对比native app浅谈web性能优化

关于web app对比native app浅谈web性能优化1.web app对比native app 优势跨平台:所有系统都能运行 免安装:打开浏览器,就能使用 快速部署:升级只需在服务器更新代...
  • hibop
  • hibop
  • 2016年11月12日 16:09
  • 89
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈---测试Native Windows Command与Native PowerShell Command哪个效率高
举报原因:
原因补充:

(最多只允许输入30个字)