Skip to content

Conversation

@vseanreesermsft
Copy link

No description provided.

Mirroring and others added 13 commits August 6, 2024 20:41
… extension data.

Bug fix to address performance issues when deserializing large payloads in `JsonObject` extension data.

Mitigates performance issues by optimizing the deserialization process for large `JsonObject` extension data properties.
- Added `LargeJsonObjectExtensionDataSerializationState` class to temporarily store properties in a dictionary for efficient updates.
- Modified `JsonObjectConverter` to use the new state class for large objects.
- Updated `ObjectDefaultConverter` and `ObjectWithParameterizedConstructorConverter` to complete deserialization using the new state class.
- Added tests in `JsonObjectTests` to validate performance improvements with large payloads.
This improves the performance of the `ZipArchive` by optimizing the removal of extra fields.
- `src/libraries/System.IO.Compression/src/System/IO/Compression/ZipBlocks.cs`: Replaced multiple iterations and list operations with a single `RemoveAll` call to remove specific `ZipGenericExtraField` entries.
This addresses a bug in the `GetParts` method by porting a fix from .NETFramework, improving part URI handling and collision detection..

`src/libraries/System.IO.Packaging/src/System/IO/Packaging/Package.cs`: Added sorting of parts array, updated dictionary structure for part URIs, and implemented collision detection and handling.

`src/libraries/System.IO.Packaging/src/System.IO.Packaging.csproj`: Enabled package generation on build and updated servicing version.
…l TFMs

Note that Microsoft.Extensions.Caching.Memory is deployed OOB via NuGet, and multi-targets including support for netfx and ns2.0

Marvin is the string hashing used in modern .NET (https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Marvin.cs); this change extends this behaviour to `string` keys when used with `MemoryCache` - noting that in many scenarios we *expect* the key to be a `string` (even though other types are allowed)

To do this we:

- ~~add a custom key equality comparer for use with `ConcurrentDictionary<object, CacheEntry>` (we do this on all TFMs, replacing the need for the dynamic lookup via `EqualityComparer<TKey>.Default`)~~
- split the internal dictionary into 2 - one for `string`, one for everything else
- in down-level TFMs only, provide a custom `string` key comparer with `MarvinHash` enabled (local snapshot since not available)

This gives us Marvin everywhere, and Marvin+rehash on netcore TFMs (rehash requires `TKey` === `string`)
@ericstj ericstj added the Servicing-approved Approved for servicing release label Oct 8, 2024
@directhex
Copy link
Contributor

/ba-g All failures seem expected, per current state of rolling build

@directhex directhex merged commit 061c8b7 into dotnet:release/6.0 Oct 9, 2024
144 of 156 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators Nov 9, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-codeflow for labeling automated codeflow Servicing-approved Approved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants