Chapter4/4.4_OutputObject/Benchmark/CustomObjectBenchmark.ps1
$source = @"
public class MyClass { public string Date { get; set; } public string Path { get; set; } public int FileCount { get; set; } public int Sum { get; set; } } "@ Add-Type -TypeDefinition $source -Language CSharp class MyClass2 { [string]$Date [string]$Path [int]$FileCount [int]$Sum } class Result { [string]$Name [double]$TotalSecond } [Result]@{ Name = "AddMember_Pipeline" TotalSecond = & { $result = Measure-Command { foreach ($i in 1..10000) { $output = New-Object -TypeName PSObject $output | Add-Member -MemberType NoteProperty -Name Name -Value "Joh" -PassThru | Add-Member -MemberType NoteProperty -Name Number -Value 1 -PassThru | Add-Member -MemberType NoteProperty -Name ID -Value 10 -PassThru } } return $result.TotalSeconds } } [Result]@{ Name = "AddMember" TotalSecond = & { $result = Measure-Command { foreach ($i in 1..10000) { $output = New-Object -TypeName PSObject $output | Add-Member -MemberType NoteProperty -Name Name -Value "Joh" -PassThru $output | Add-Member -MemberType NoteProperty -Name Number -Value 1 -PassThru $output | Add-Member -MemberType NoteProperty -Name ID -Value 10 -PassThru } } return $result.TotalSeconds } } [Result]@{ Name = "CSharpClass" TotalSecond = & {$result = Measure-Command { foreach ($i in 1..10000) { $property = @{ Date = $date Path = $LiteralPath FileCount = $measure.Count Sum = $measure.Sum } $output = New-Object -TypeName MyClass -Property $property } } return $result.TotalSeconds } } [Result]@{ Name = "CSharpClass_Declare" TotalSecond = & {$result = Measure-Command { foreach ($i in 1..10000) { $output = [MyClass]@{ Date = $date Path = $LiteralPath FileCount = $measure.Count Sum = $measure.Sum } } } return $result.TotalSeconds } } [Result]@{ Name = "PowerShellClass" TotalSecond = & {$result = Measure-Command { foreach ($i in 1..10000) { $output = [MyClass2]@{ Date = $date Path = $LiteralPath FileCount = $measure.Count Sum = $measure.Sum } } } return $result.TotalSeconds } } [Result]@{ Name = "PSObject" TotalSecond = & {$result = Measure-Command { foreach ($i in 1..10000) { $output = @{ Date = $date Path = $LiteralPath FileCount = $measure.Count Sum = $measure.Sum } $output = New-Object -TypeName PSObject -Property $property } } return $result.TotalSeconds } } [Result]@{ Name = "PSCustomObject" TotalSecond = & {$result = Measure-Command { foreach ($i in 1..10000) { $output = [pscustomobject]@{ Date = $date Path = $LiteralPath FileCount = $measure.Count Sum = $measure.Sum } } } return $result.TotalSeconds } } [Result]@{ Name = "SelectObject" TotalSecond = & {$result = Measure-Command { foreach ($i in 1..10000) { $output = 1 | Select-Object Date, Path, FileCount, Sum $output.Date = $date $output.Path = $LiteralPath $output.FileCount = $measure.Count $output.Sum = $measure.Sum } } return $result.TotalSeconds } } |