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 ...
随机推荐
- 【李婶小教程】(SE_lab3)
额,今天说一下这个SE_lab3那几个东西都是怎么装的. 啊--其实技术含量貌似不是很高的. 1.先说最简单的一个叫做:Findbugs 点这个Eclipse Marketplace,这是一个神奇的东 ...
- 命名实参和可选实参(C# 编程指南)
https://msdn.microsoft.com/zh-cn/library/dd264739.aspx CalculateBMI(weight: 123, height: 64); Calcul ...
- HDU_2050——折线分割平面问题,递推
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...
- Contest - 第10届“新秀杯”ACM程序设计大赛网络资格赛 赛后信息(晋级名单·正式版)
2014_acm_fresh_0057 刘畅 20131620 2014_acm_fresh_0099 汪哲 20132185 2014_acm_fresh_0086 陈顺 2014111776 20 ...
- 高级私人定制西服品牌:XUAN PRIVE 为定制而生_乐活_onlylady女人志
高级私人定制西服品牌:XUAN PRIVE 为定制而生_乐活_onlylady女人志 高级私人定制西服品牌:XUAN PRIVE 为定制而生
- PHP中数组转换为XML格式
最近公司要做一个API接口,输出格式要有JSON与XML格式, 在PHP中,输入JSON直接json_encode就可以,但输出XML没有提供函数,于是决定自己写一个. <?php /** * ...
- 简单CSS定位瀑布流实现方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js函数收藏:获取cookie值
//先设置一段子cookie var d = new Date(); d.setMonth(d.getMonth() + 1); d = d.toGMTString(); var a = " ...
- [深入React] 3.JSX的神秘面纱
<div> <List /> </div> 会被编译为: React.createElement("div",null, React.creat ...
- hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...