Skip to content

Instantly share code, notes, and snippets.

@evetsleep
Last active May 17, 2016 21:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evetsleep/e1d6c9a4abee44608adc200932797cd6 to your computer and use it in GitHub Desktop.
Save evetsleep/e1d6c9a4abee44608adc200932797cd6 to your computer and use it in GitHub Desktop.
New-Benchmark.ps1
function New-Benchmark {
[CmdletBinding()]Param(
[Parameter(
Position = 0,
Mandatory = $true
)]
[String]$Name,
[Parameter(
Position = 1,
Mandatory = $true
)]
[scriptblock]$Expression,
[Parameter(
Position = 2
)]
[int]$Samples = 1
)
$timings = New-Object System.Collections.ArrayList
$sampleCount = $Samples
do {
$cmdTime = Measure-Command -Expression $Expression
[void]$timings.Add($cmdTime)
$samples--
}
while ($Samples -gt 0)
$stats = $timings | Measure-Object -Average -Minimum -Maximum -Property Ticks
$propertyHash = [ordered]@{}
$propertyHash.Name = $Name
$propertyHash.Samples = $sampleCount
$propertyHash.Average = (New-Object System.TimeSpan $stats.Average).TotalMilliseconds
$propertyHash.Minimum = (New-Object System.TimeSpan $stats.Minimum).TotalMilliseconds
$propertyHash.Maximum = (New-Object System.TimeSpan $stats.Maximum).TotalMilliseconds
New-Object -TypeName PSObject -Property $propertyHash
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment