Introduction:
Efficiency is key when working with PowerShell, and maximizing performance is a common goal for script developers. In this post, we'll explore various techniques for retrieving the maximum number from arrays of different sizes, comparing wellknown approaches like MeasureObject, SortObject and a more mathematical method.
Methods:

MeasureObject:
To retrieve the maximum number using MeasureObject, the following command is used:
(@(1,3,55,69,13,37) MeasureObject Maximum).Maximum

SortObject:
Another approach involves sorting the array and extracting the highest number from the last index:
(@(1,3,55,69,13,37) SortObject)[1]

Mathematical Approach:
Utilizing the [System.Math] class and its Max method requires a loop through the array:
$Numbers = (@(1,3,55,69,13,37)
$maxValue = $Numbers[0] #we need to start with an number
foreach($num in $Numbers){
$maxValue = [System.Math]::Max($Num,$maxValue)
}
Performance Testing:
For a comprehensive performance comparison, three arrays of different sizes were created:
$NumbersLarge = getrandom min 0 max 1gb count 20mb
$NumbersMedium = getrandom min 0 max 1gb count 1mb
$NumbersSmall = getrandom min 0 max 1gb count 100kb
Results:
Small List:
Technique Time RelativeSpeed Throughput
   
Math 00:00:00.144915 1x 34.5/s
Measure 00:00:00.602446 4.16x 8.3/s
Sort 00:00:02.053357 14.17x 2.44/s
Medium List:
Technique Time RelativeSpeed Throughput
   
Math 00:00:01.377477 1x 3.63/s
Measure 00:00:11.163644 8.1x 0.45/s
Sort 00:00:31.034414 22.53x 0.16/s
Large List:
Technique Time RelativeSpeed Throughput
   
Math 00:00:26.392599 1x 0.19/s
Measure 00:01:57.695910 4.46x 0.04/s
Sort 00:18:38.731559 42.39x 0/s
Conclusion:
The [System.Math]::Max() method consistently outperforms MeasureObject and SortObject, particularly for larger datasets. Although its implementation may be less intuitive, encapsulating it in a function enhances usability.
Function Implementation:
function GetMaxNumber {
param (
[int[]]Numbers
)
$MaxValue = $Numbers[0]
foreach($num in $Numbers){
$MaxValue = [System.Math]::Max($MaxValue,$num)
}
return $MaxValue
}
In scenarios where milliseconds matter and the primary goal is to retrieve the maximum number, the targeted solution using [System.Math]::Max() proves to be a powerful choice.
If you have any thoughts or feedback on this topic, feel free to share them with me on Twitter at Christian Ritter.
Best regards, Christian