Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Configuration of IJsonAssertionOptions slows down comparison a log

Offen
#77 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
csharp
Bereich
performance, testing

Rechercherichtung

Beginnen Sie in JTokenDifferentiator.CompareValues und verfolgen Sie, wie config.Invoke für jeden Wertevergleich JsonAssertionOptions erstellt. Reproduzieren Sie die gemeldete Verlangsamung mit einem großen JSON-Dokument und dem Using-Callback und vergleichen Sie anschließend das Verhalten nach einer Änderung des Optionsflusses. Als erledigt gilt die Aufgabe, wenn der Präzisionsvergleich erhalten bleibt, wiederholte Builder-Arbeit vermieden wird und eine akzeptable Performance nachgewiesen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug

To check doubles using precision when comparing JSON's, I am using the following options callback in BeEquivalentTo:

options => options.Using<double>(d => d.Subject.Should().BeApproximately(d.Expectation, 0.001))
  .WhenTypeIs<double>()

But it seems that this builder callback is being called for every value comparison.
JTokenDifferentiator.CompareValues contains:

using (var scope = new AssertionScope())
{
    actual.Value.Should().BeEquivalentTo(expected.Value, options =>
        (JsonAssertionOptions<object>)config.Invoke(new JsonAssertionOptions<object>(options)));

    hasMismatches = scope.Discard().Length > 0;
}

With the addition of the Using, a bigger json (MB's) goes from 200ms to +10s on my PC.

As a workaround, I replicated the behavior of the builder by accessing the userEquivalencySteps field on SelfReferenceEquivalencyAssertionOptions using reflection and inserting a custom IEquivalencyStep, instead of using the fluent API.
This brings it to 1s, which is acceptable for my use case.

Would it make sense to not call this options callback for every JSON value and build it once?
Or would adding API to add a custom IEquivalencyStep instead of the builder make sense?

Vorherrschende Sprache
C#
Sterne
73
Forks
30
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Ähnliche Issues

Weitere Issues zu C#

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.