Minor
4.7.2
NotPlanned
Starting with the .NET Framework 4.7.2, the implementation of decompression in the T:System.IO.Compression.DeflateStream
class has changed to use native Windows APIs by default. Typically, this results in a substantial performance improvement. All .NET applications targeting the .NET Framework version 4.7.2 or higher use the native implementation.
This change might result in some differences in behavior, which include:
-
Exception messages may be different. However, the type of exception thrown remains the same.
-
Some special situations, such as not having enough memory to complete an operation, may be handled differently.
-
There are known differences for parsing gzip header (note: only
GZipStream
set for decompression is affected):- Exceptions when parsing invalid headers may be thrown at different times.
- The native implementation enforces that values for some reserved flags inside the gzip header (i.e. FLG) are set according to the specification, which may cause it to throw an exception where previously invalid values were ignored.
-
Quirked
-
Build-time break
If decompression with native APIs has adversely affected the behavior of your app, you can opt out of this feature by adding the Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression
switch to the runtime
section of your app.config file and setting it to true
:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides
value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
T:System.IO.Compression.DeflateStream
T:System.IO.Compression.GZipStream
Core