Skip to content

Instantly share code, notes, and snippets.

@diecknet
Created October 27, 2022 12:40
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save diecknet/def7d00e81894980f3ed500fdafd6c0d to your computer and use it in GitHub Desktop.
PowerShell Hashtable Performance Tests
<#
Hashtable Access Performance Test
Settings:
$maxentries = Number of entries to put into the hashtable
$iterations = Number of access test per method
#>
$maxentries = 100000
$iterations = 5000
$meineHashtable = @{}
for($i = 1; $i -le $maxentries; $i++) {
$meineHashtable.Add("ABC$i", "Hier ein Wert: $i")
}
$dot=for($i=0; $i -lt $iterations; $i++) {
$obj = "ABC$(Get-Random -Minimum 1 -Maximum $maxentries)"
Measure-Command {
$meineHashtable.$obj
}
}
$eck=for($i=0; $i -lt $iterations; $i++) {
$obj = "ABC$(Get-Random -Minimum 1 -Maximum $maxentries)"
Measure-Command {
$meineHashtable[$obj]
}
}
Write-Output "Variante mit [eckigen] Klammern:"
$eck.TotalMilliseconds | Measure-Object -Average -Maximum -Minimum | Format-Table Average,Maximum,Minimum
Write-Output "Variante mit .Punkt:"
$dot.TotalMilliseconds | Measure-Object -Average -Maximum -Minimum | Format-Table Average,Maximum,Minimum
<#
Hashtable Add Performance Test
Settings:
$maxentries = Number of entries to put into the hashtable
$iterations = Number of tests per method
#>
$maxentries = 20000
# weil .Key/.Punkt sehr langsam ist, teste ich nicht so oft ;-)
$iterations = 10
$dotadd = for($test = 0; $test -le $iterations; $test++) {
$meineHashtable.Clear()
$meineHashtable = @{}
Measure-Command {
for($i = 1; $i -le $maxentries; $i++) {
$meineHashtable.Add("ABC$i", "Hier ein Wert: $i")
}
}
}
$dot = for($test = 0; $test -le $iterations; $test++) {
$meineHashtable.Clear()
$meineHashtable = @{}
Measure-Command {
for($i = 1; $i -le $maxentries; $i++) {
$meineHashtable."ABC$i" = "Hier ein Wert: $i"
}
}
}
$eck = for($test = 0; $test -le $iterations; $test++) {
$meineHashtable.Clear()
$meineHashtable = @{}
Measure-Command {
for($i = 1; $i -le $maxentries; $i++) {
$meineHashtable["ABC$i"] = "Hier ein Wert: $i"
}
}
}
Write-Output "Variante mit [eckigen] Klammern:"
$eck.TotalMilliseconds | Measure-Object -Average -Maximum -Minimum | Format-Table Average,Maximum,Minimum
Write-Output "Variante mit .Punkt:"
$dot.TotalMilliseconds | Measure-Object -Average -Maximum -Minimum | Format-Table Average,Maximum,Minimum
Write-Output "Variante mit .Add():"
$dotadd.TotalMilliseconds | Measure-Object -Average -Maximum -Minimum | Format-Table Average,Maximum,Minimum
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment