The PowerShell 5.0 has features to support ZIP archives – Expand-Archive and Compress-Archive. They are very handy but what about performance?
In my previous post I measured performance of extracting ZIP archive, in this post I will focus on a ZIP archive creation. Again I will compare two ways of creation a ZIP archive – provided by PowerShell and provided by .NET Framework.
The first method is using native PowerShell command Compress-Archive; the second method is using CreateFromDirectory method from System.IO.Compression.Filesystem. The PowerShell code to compress a folder is shown below:
$measureCreate = Measure-Command {
Add-Type -assembly System.IO.Compression.Filesystem
[io.compression.zipfile]::CreateFromDirectory("$folderToArchive", "$archivePath\Create$i.zip", [System.IO.Compression.CompressionLevel]::Optimal, $true )
}
$measureCompress = Measure-Command {
$ProgressPreference=’SilentlyContinue’
Compress-Archive $folderToArchive "$archivePath\Compress$i.zip" -CompressionLevel Optimal
}
First I compared a size of archives created by these two methods, and size is quite equal so I guess that compression level was the same in both cases.

The results are the following for around 313MB folder with 25000 of files.

- First column – ZIP archive and source folder are on the same disk
- Second column – ZIP archive and source folder are on different disks
---
CreateFromDirectory 0:16
Compress-Archive 0:51
---
CreateFromDirectory 0:16
Compress-Archive 0:52
---
CreateFromDirectory 0:16
Compress-Archive 0:52
---
CreateFromDirectory 0:16
Compress-Archive 0:51
---
CreateFromDirectory 0:16
Compress-Archive 0:51
---
CreateFromDirectory 0:16
Compress-Archive 0:53
---
CreateFromDirectory 0:16
Compress-Archive 0:53
---
CreateFromDirectory 0:16
Compress-Archive 0:51
---
CreateFromDirectory 0:17
Compress-Archive 0:52
---
CreateFromDirectory 0:17
Compress-Archive 0:51
---
CreateFromDirectory 0:16
Compress-Archive 0:51
---
CreateFromDirectory 0:17
Compress-Archive 0:53
---
CreateFromDirectory 0:16
Compress-Archive 0:52
---
CreateFromDirectory 0:17
Compress-Archive 0:53
---
CreateFromDirectory 0:16
Compress-Archive 0:51
---
CreateFromDirectory 0:17
Compress-Archive 0:53
---
CreateFromDirectory 0:17
Compress-Archive 0:51
---
CreateFromDirectory 0:17
Compress-Archive 0:53
---
CreateFromDirectory 0:17
Compress-Archive 0:54
---
CreateFromDirectory 0:17
Compress-Archive 0:52
Conclusions
- CreateFromDirectory is much faster then Compress-Archive
- There is no difference when source folder for compression and output archive file are on the same disk drive. As we remember from previous post this is important for expanding archive to use two different disks for source and destination.
How can I reproduce your test?
Here is script used by me for performance tests.
1 comment