Skip to content

Commit c2891d3

Browse files
ericstjcarlossanlop
authored andcommitted
ZipArchive: Improve performance of removing extra fields
This improves the performance of removing extra fields in the ZipArchive by optimizing the removal process. `src/libraries/System.IO.Compression/src/System/IO/Compression/ZipBlocks.cs`: Replaced multiple iterations and list operations with a single `RemoveAll` call to enhance efficiency.
1 parent 4426046 commit c2891d3

File tree

1 file changed

+5
-13
lines changed
  • src/libraries/System.IO.Compression/src/System/IO/Compression

1 file changed

+5
-13
lines changed

src/libraries/System.IO.Compression/src/System/IO/Compression/ZipBlocks.cs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,12 @@ public static Zip64ExtraField GetAndRemoveZip64Block(List<ZipGenericExtraField>
269269
zip64Field._localHeaderOffset = null;
270270
zip64Field._startDiskNumber = null;
271271

272-
List<ZipGenericExtraField> markedForDelete = new List<ZipGenericExtraField>();
273272
bool zip64FieldFound = false;
274273

275-
foreach (ZipGenericExtraField ef in extraFields)
274+
extraFields.RemoveAll(ef =>
276275
{
277276
if (ef.Tag == TagConstant)
278277
{
279-
markedForDelete.Add(ef);
280278
if (!zip64FieldFound)
281279
{
282280
if (TryGetZip64BlockFromGenericExtraField(ef, readUncompressedSize, readCompressedSize,
@@ -285,24 +283,18 @@ public static Zip64ExtraField GetAndRemoveZip64Block(List<ZipGenericExtraField>
285283
zip64FieldFound = true;
286284
}
287285
}
286+
return true;
288287
}
289-
}
290288

291-
foreach (ZipGenericExtraField ef in markedForDelete)
292-
extraFields.Remove(ef);
289+
return false;
290+
});
293291

294292
return zip64Field;
295293
}
296294

297295
public static void RemoveZip64Blocks(List<ZipGenericExtraField> extraFields)
298296
{
299-
List<ZipGenericExtraField> markedForDelete = new List<ZipGenericExtraField>();
300-
foreach (ZipGenericExtraField field in extraFields)
301-
if (field.Tag == TagConstant)
302-
markedForDelete.Add(field);
303-
304-
foreach (ZipGenericExtraField field in markedForDelete)
305-
extraFields.Remove(field);
297+
extraFields.RemoveAll(field => field.Tag == TagConstant);
306298
}
307299

308300
public void WriteBlock(Stream stream)

0 commit comments

Comments
 (0)