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-Object psobject |
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-Table TotalSeconds -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 ...
随机推荐
- C# winform如何清除由Graphics类绘制出来的所有线条或图形
在C#winform应用程序中,可以用GDI绘制出线条或图形. 1.在主窗体上绘制线条或图形 using (Graphics g = this.CreateGraphics()) { ...
- poj3237 Tree
Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edg ...
- cf202-div 1-B - Apple Tree:搜索,数论,树的遍历
http://codeforces.com/contest/348/problem/B B. Apple Tree time limit per test 2 seconds memory l ...
- HDU - 5156 Harry and Christmas tree
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5156 题意 : 给一颗编号为1-n的以1为根的树, 已知有m个颜色的礼物分布在某些节点上(同一节点 ...
- 创建多模块maven项目
有两种方式: 1,new -->maven project-->maven-archetype-quickstart 建完多个独立的project后,手动修改pom文件的packing类型 ...
- 使用powershell监控命令行console程序并在停止时启动
有一种C#命令行console程序,为了能看到console台的输出所以不能做成服务.为了防止这些程序自己死掉,使用powershell监控程序并重启 #利用程序名来进行重启if (!(get-pro ...
- JS-Math内置对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- hdu 5389 Zero Escape(记忆化搜索)
Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi ...
- 安装orcle10g oel5.6
一.安装OEL 5.6 二.安装VMware Tools 1) 选择菜单里的VM选项,里面有一个子选项是installVMware Tools,选择它. 2) 回到操作系统,将光驱挂载到/mnt ...
- ssh远程登录linux live系统
要想ssh远程登录,须要准备两件事:配置同网段IP和开启SSH服务. 因为live系统没有IP,所以首先须要配置IP. 我的live系统是在虚拟机上启动的,宿主IP为192.168.230.1,liv ...