AcroForm-relatiecache
HotPDF onderhoudt een documentlocale bidirectionele index over terminale AcroForm-velden, gekwalificeerde veldnamen, widget-annotaties, widget-ordinals en paginaposities
Opzoekgedrag
Veldindex- en gekwalificeerde-naam-opzoeking gebruiken na de eerste opbouw directe arrays en een hoofdlettergevoeligheid negerende open-addressed naammap
Een ouder-veld kan overgeërfde /FT-, /Ff- en /Opt-invoeren leveren zonder zelf een terminaal veld te zijn; benoemde kinderen zoals group.a en group.b blijven aparte geïndexeerde velden
Benoemde kindvelden worden onderscheiden van onbenoemde widgetkinderen, of het veld en de widget nu één woordenlijst delen of aparte woordenlijsten gebruiken
GetLoadedFormFieldWidgetPageIndex lost één widget-ordinal op naar zijn pagina, terwijl GetLoadedFormFieldIndexForAnnotation een pagina-annotatie terugkaart naar zijn veld en widget-ordinal
Lidmaatschap van de annotatiearray gaat vóór een /P-invoer van de widget, en bij misvormd dubbel lidmaatschap wint de eerste passende pagina in documentvolgorde
Widgets die in /AcroForm /Fields ontbreken worden als wees geïndexeerd voor diagnostiek, maar worden niet als synthetische formuliervelden blootgesteld
Opbouw en mutatie
De cache wordt lui opgebouwd met één doorgang door de veldboom plus één doorgang door de pagina-annotaties
Het aanmaken van geladen velden breidt een geldige cache incrementeel uit, terwijl veldverwijdering, hernoeming, widgetverplaatsing, annotatieverwijdering, merge-registratie, XFA-veldsamenvoeging en paginatabelmutaties de cache ongelen voordat de graaf verandert
De volgende relatiequery bouwt opnieuw op vanuit de huidige objectgraaf, inclusief widgets zonder /P-invoer
Het verwijderen van één terminaal kind verwijdert zijn eigen widgets en zijn veldboom-invoer, terwijl de broertjes/zussen en hun overgeërfde instellingen behouden blijven
Roep InvalidateLoadedFormRelationshipCache aan nadat je via ruwe object-API's AcroForm-, veld-, widget-, pagina-/Annots-, /Parent-, /Kids- of /P-woordenlijsten hebt gewijzigd
Prestaties en eigendom
De naam- en objectmappen houden hun load factor onder de helft en bieden warme opzoeking in verwachte constante tijd
Een regressiepoort bouwt 10.000 geladen velden, bewijst de lineaire doorgangstelemetrie en eist dat herhaalde naamopzoeking op Win32 en Win64 minstens 100 keer sneller is dan een koude opbouw plus opzoeking
De cache bewaart niet-eigenende objectverwijzingen en de toegang tot de geladen-document-graaf blijft door de aanroeper geserialiseerd
Zie ook: GetLoadedFormFieldWidgetPageIndex, GetLoadedFormFieldIndexForAnnotation, InvalidateLoadedFormRelationshipCache, GetLoadedFormRelationshipCacheStatistics