PowerShell 中使用json对象的性能比较
PowerShell v3 – Creating Objects With [pscustomobject] – it’s fast!
*****Warning. This is from a preview release******
PowerShell v2 brought the ability to create a custom object via the following method:
1 |
$CustomObject1 = New-Object psobject -Property @{a=1; b=2; c=3; d=4} |
2 |
3 |
$CustomObject1 | Format-List |

PowerShell v3 brings the possibility to create a custom object via
[pscustomobject]
1 |
$CustomObject2 = [pscustomobject]@{a=1; b=2; c=3; d=4} |
2 |
3 |
$CustomObject2 | Format-List |

Note: both methods create a PSCustomObject with NoteProperties, not a hashtable object
1 |
$CustomObject1 | Get-Member |
2 |
3 |
$CustomObject2 | Get-Member |

So, why would you want to do it this way? Well firstly it preserves the insertion order,which helps with my OCD issues again. However, the main reason I have seen so far is that it is also a lot quicker. Fellow PowerShell MVP Tome Tanasovski carried out some basic performance testing which I thought I would highlight here.
There are four different ways you can create a custom object and a typical use case would be using PowerShell for reporting purposes, e.g. iterating through a list of VMs and pulling out various properties of them to create a report. With a very basic example, let’s have a look at the speed differences:
1) Select-Object
Not everybody knows that it’s possible to create a custom object with Select-Object. This was a handy trick since v1 days and was pretty quick too.
1 |
$TestSelect = { |
2 |
(0..5000) | ForEach-Object {$CustomObject = "" | Select-Object Name,ID |
3 |
$CustomObject.Name = "Test Name" |
4 |
$CustomObject.ID = $_ |
5 |
$CustomObject |
6 |
} |
7 |
} |
8 |
Measure-Command $TestSelect | Format-Table TotalSeconds -Autosize |

2) Add-Member
1 |
$TestAddMember = { |
2 |
(0..5000) | ForEach-Object {$CustomObject = New-Objectpsobject |
3 |
$CustomObject | Add-Member -Name "Name" -Value "Test Name" |
4 |
$CustomObject | Add-Member -Name "ID" -Value $_ |
5 |
$CustomObject |
6 |
} |
7 |
} |
8 |
Measure-Command $TestAddMember | Format-Table TotalSeconds -Autosize |

3) Property Parameter
1 |
$TestProperty = { |
2 |
(0..5000) | ForEach-Object {New-Object psobject -Property@{Name = "Test Name"; ID = $_}} |
3 |
} |
4 |
Measure-Command $TestProperty | Format-Table TotalSeconds -Autosize |
4) [pscustomobject]
1 |
$TestProperty = { |
2 |
(0..5000) | ForEach-Object {[pscustomobject]@{Name = "Test Name"; ID = $_}} |
3 |
} |
4 |
Measure-Command $TestPSCustomObject | Format-TableTotalSeconds -Autosize |

So a summary of the these basic testing results looks pretty good for [pscustomobject]!
Select-Object = 7.74s
Add-Member = 28.87s
Property = 7.29
[pscustomobject] = 0.94s
I hope to try out [pscustomobject] on some of my reporting scripts and see what difference it makes to real world testing.
PowerShell 中使用json对象的性能比较的更多相关文章
- MVC中处理Json和JS中处理Json对象
MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...
- js中的json对象详细介绍
JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...
- 简单使用JSON,JavaScript中创建 JSON 对象(一)
JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...
- js中 给json对象添加属性和json数组添加元素
js中 给json对象添加新的属性 比如现在有一个json对象为jsonObj,需要给这个对象添加新的属性newParam,同时给newParam赋值为pre.做法如下: var obj={ &quo ...
- 利用reduce方法,对数组中的json对象去重
数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...
- js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。
JSON.parse()用于从一个字符串中解析出json对象. var str = '{"name":"huangxiaojian","age&quo ...
- java中的JSON对象的使用
申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...
- js中的json对象
1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不须要 ...
- ios中解析json对象基类
这个是对上面一篇写的一个解析json对象的基类 @interface BaseObjectFromJson : NSObject + (id) objectWithDict:(NSDictionary ...
随机推荐
- HDU4436---str2int 后缀树组(12年天津区域赛)
str2int Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- eclipse tomcat 网页404的一个小问题
之前一篇文章说过关于修改tomcat布置的应用的localhost路径.因为有两个项目在eclipse,所以我每次启动tomcat的时候都会加载两个项目, 但我其实只用调试其中一个项目,所以我就在se ...
- MyBatis的事务处理
先来假设这样一个问题:如果数据库里面有一个用户表和一个作家表,那么当要添加一条数据到作家表中时,作家表的id必须是用户表中的其中一个id,因为作家一定也要是一个用户.这时就涉及到事务处理. 在上一篇博 ...
- python socket实例练习
Web Server是基于Socket编程,又称之为网络编程,socket是网络编程接口,socket可以建立网络连接,读数据,写数据.socket模块定义了一些常量参数,用来指定socket的的地址 ...
- Sublime Text2 按shift键选择不了的问题
记录下来,免得以后忘了: 今天在Sublime Text 2装了一个ThinkPHP插件之后.发现按shift键+鼠标左键选择不了内容了.原因是ThinkPHP里的热键与系统的有冲突了,须要设置例如以 ...
- mac os使用lsusb命令和连接未知的Android设备
今天在mac上连接一个android设备发现连不上,adb devices看不到设备.于是想用lsusb命令看下,结果发现Mac居然没有这个命令,于是网上搜了下.发现了以下的命令system_prof ...
- C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...
- 浅谈Java内存及GC
目录: 1.JAVA虚拟机规范与JAVA虚拟机 2.JVM结构图 3.GC策略与原理 4.垃圾收集算法 5.回收的时机 6.垃圾搜集器 一.JAVA虚拟机规范与JAVA虚拟机 内存,是指程序运行时的数 ...
- Android 基于Netty的消息推送方案之对象的传递(四)
在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...
- css布局&初始化&基准样式
学习css布局比较好的网站 学习css布局 1.css设置模块 typography(字体) colour(颜色) link(链接) forms(表单) layout(布局) navigation(导 ...