perf(media): herschrijf duplicaatverwijzingen in één deckpass #1052

Closed
opened 2026-08-01 08:26:10 +00:00 by brenno · 1 comment
Owner

Context
countReferences vergelijkt iedere gevonden afbeeldingsreferentie met ieder doelpad. Bij toepassen loopt _applyDedupePlan vervolgens voor iedere te verwijderen kopie opnieuw door ieder deckbestand en leest/schrijft dat bestand opnieuw.

Impact
Veel duplicaten en veel decks vermenigvuldigen elkaar. In het maximum van 20000 bij 20000 ontstaan honderden miljoenen vergelijkingen of volledige decklezingen.

Relevante code

  • lib/services/image_reference_service.dart:74 en 135
  • lib/widgets/dialogs/parts/image_carousel_picker_actions.dart:405

Acceptatie

  • Bouw één genormaliseerde target- of replacement-map.
  • Lees ieder deckbestand eenmaal, tel/vervang alle doelen in die pass en schrijf hooguit eenmaal wanneer iets veranderde.
  • Behoud relatieve POSIX-paden en atomair schrijven.
  • Schaaltest telt decklezingen/schrijfacties en bewijst O(decks + verwijzingen + targets) in plaats van het huidige product.
Context countReferences vergelijkt iedere gevonden afbeeldingsreferentie met ieder doelpad. Bij toepassen loopt _applyDedupePlan vervolgens voor iedere te verwijderen kopie opnieuw door ieder deckbestand en leest/schrijft dat bestand opnieuw. Impact Veel duplicaten en veel decks vermenigvuldigen elkaar. In het maximum van 20000 bij 20000 ontstaan honderden miljoenen vergelijkingen of volledige decklezingen. Relevante code - lib/services/image_reference_service.dart:74 en 135 - lib/widgets/dialogs/parts/image_carousel_picker_actions.dart:405 Acceptatie - Bouw één genormaliseerde target- of replacement-map. - Lees ieder deckbestand eenmaal, tel/vervang alle doelen in die pass en schrijf hooguit eenmaal wanneer iets veranderde. - Behoud relatieve POSIX-paden en atomair schrijven. - Schaaltest telt decklezingen/schrijfacties en bewijst O(decks + verwijzingen + targets) in plaats van het huidige product.
Author
Owner

Opgelost op main (PR #1093, merge in 78f2dc2d). countReferences gebruikt nu één canonieke lookup-map; het toepassen bouwt één replacement-map en leest/schrijft elk deck hooguit één keer via het nieuwe replaceReferencesMulti (relatieve POSIX-paden en atomair schrijven behouden) — O(decks + verwijzingen + doelen). Tests: veel-doelen-telling, één-pass-herschrijving, geen-schrijf-zonder-treffer en het volledige ontdubbelpad.

Opgelost op main (PR #1093, merge in 78f2dc2d). countReferences gebruikt nu één canonieke lookup-map; het toepassen bouwt één replacement-map en leest/schrijft elk deck hooguit één keer via het nieuwe replaceReferencesMulti (relatieve POSIX-paden en atomair schrijven behouden) — O(decks + verwijzingen + doelen). Tests: veel-doelen-telling, één-pass-herschrijving, geen-schrijf-zonder-treffer en het volledige ontdubbelpad.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1052
No description provided.