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

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

VS 2012 编译64位的GDAL

注意点,打开VS2012 x64 Native Tools Command Prompt然后运行下面的命令:nmake -f makefile.vc WIN64=TRUE等待吧,成功。之前不成功是没有...
  • sheismylife
  • sheismylife
  • 2013年08月20日 13:49
  • 3580

Windows下搭建React native开发环境

一、环境搭建 react native本地搭建其实就是简单的几步: 1、首先得安装node.js,下载地址:https://nodejs.org/en/,下载最新的,如图: 2、打开cmd运行执...
  • sushineboy
  • sushineboy
  • 2017年06月14日 17:20
  • 898

React Native遇见的几个坑

1. 环境变量配置解决办法:配置ANDROID_HOME,和JAVA_HOME。安装Android SDK,并安装Build Tool 23.0.1,最好把所有版本装上,因为将来使用的插件可能依赖的版...
  • woxueliuyun
  • woxueliuyun
  • 2017年01月15日 15:04
  • 5235

react-native Command `run-android` unrecognized.

从 github 上下载工程 运行 react-native run-android  提示 react-native Command `run-android` unrecognized. .....
  • qq_35798906
  • qq_35798906
  • 2016年11月21日 20:42
  • 865

Visual Studio Command Prompt 工具配置方法

软件版本:VS2013如何打开这个工具? 打开VS2013,在”工具“菜单下可以找到。 打开”开始“,在程序菜单中找到VS2013,打开”Visual Studio Tools“,可以找到Visual...
  • Xingewudi21
  • Xingewudi21
  • 2015年04月18日 22:36
  • 7058

React native 开发环境配置 for windows

React native开发环境配置  目有前来讲使用windows的开发者还是比较多的,毕竟门槛会低很多。移动开发可谓是热火朝天,涌现了一下框架,为移动开发助力。React Native是react...
  • xiao_Yu_X
  • xiao_Yu_X
  • 2016年08月13日 14:11
  • 267

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

第一种:你的终端输入命令错了。 第二种:没有配置环境 在~/user目录下 1、创建.bash_profile文件 输入命令行touch .bash_profi...
  • qq_25404567
  • qq_25404567
  • 2016年09月25日 22:01
  • 2401

React Native Mac 环境搭建

打开终端:brew install node看到输入npm -v 后查看安装成功的node.js然后执行 npm install -g react-native-cli安装react-native ...
  • mingtiannihao623
  • mingtiannihao623
  • 2017年07月20日 23:39
  • 196

React Native 学习中踩过的那些坑

1、react-native run-android时提示aapt权限被拒绝完整LOG如下: java.io.IOException: Cannot run program "/Users/name...
  • u011163115
  • u011163115
  • 2016年09月17日 19:45
  • 864

React Native引入第三方库

npm install [第三方库] –save npm uninstall [第三方库] –save npm WARN addRemoteGit Error: Command failed: git...
  • u011197081
  • u011197081
  • 2017年01月06日 12:47
  • 3195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈---测试Native Windows Command与Native PowerShell Command哪个效率高
举报原因:
原因补充:

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