Registry-Cache
Zuletzt geändert: 19.04.2026 04:42

Registry-Cache #

Der Registry-Cache ist eine reine Performance-Optimierung für das Lesen aus der SQL-Registry. Er ist für den normalen Anwendungsfall transparent, sollte aber einmal verstanden sein, wenn man viele Registry-Zugriffe hintereinander macht oder auf einem VPN arbeitet.

Zwei Betriebsarten #

EulandaXtools kann die Registry auf zwei Arten lesen:

LegacyStore (ohne Cache) #

flowchart TD L1[Get-EulandaRegistryValue]:::anlegen L2[SQL-Roundtrip
cnf_RegReadString]:::storno L3[(SQL-Registry)]:::store L1 --> L2 --> L3 classDef anlegen fill:#2e86c1,color:#fff,stroke:#1a5276 classDef storno fill:#c0392b,color:#fff,stroke:#7b241c classDef store fill:#566573,color:#fff,stroke:#2c3e50

HiveStore (mit Cache) #

flowchart TD H1[Get-EulandaRegistryValue]:::anlegen H2{Subtree
schon im
Cache?}:::umwandlung H3[aus Hive lesen
0 ms]:::buchen H4[cn_RegBulkRead
einmalig]:::teilstorno H5[(SQL-Registry)]:::store H6[Subtree cachen]:::buchen H1 --> H2 H2 -->|ja| H3 H2 -->|nein| H4 H4 --> H5 H4 --> H6 H6 --> H3 classDef anlegen fill:#2e86c1,color:#fff,stroke:#1a5276 classDef buchen fill:#27ae60,color:#fff,stroke:#196f3d classDef umwandlung fill:#8e44ad,color:#fff,stroke:#5b2c6f classDef teilstorno fill:#e67e22,color:#fff,stroke:#af601a classDef store fill:#566573,color:#fff,stroke:#2c3e50

ModusBeschreibung
LegacyStoreJeder Get-EulandaRegistryValue führt direkt einen Stored-Proc-Call aus. Kein Cache, kein State in der Session.
HiveStoreEin kompletter Subtree wird einmal eingelesen und im PowerShell-Prozess als “Hive” gecacht. Folgeabfragen auf Werte in der Hive gehen dann ohne SQL-Roundtrip aus dem Speicher.
Faktor 9 auf VPN. Der HiveStore ist auf VPN-Verbindungen um den Faktor ~9 schneller (Messung 2026 an einem Standard-Szenario mit 15 Value-Reads aus einem Subtree). Bei LAN-Verbindungen ist der Unterschied deutlich kleiner, aber immer noch spürbar.

Steuerung #

Die Umgebungsvariable EULXT_REGCACHE schaltet zwischen den Modi:

WertEffekt
offLegacyStore (immer direkter SQL-Call)
on oder nicht gesetztHiveStore (Cache aktiv)

Der aktuelle Modus lässt sich abfragen:

Get-EulandaRegistryCacheMode
# Ergebnis: 'Hive', 'Legacy-Fallback' oder 'Off'

Cache gezielt verwerfen #

Cache wird stale bei externen Schreibzugriffen. Nach einem Schreibvorgang aus der EULANDA-Software oder einem anderen Prozess ist der Cache in der eigenen PowerShell-Session veraltet – die eigene Session weiß nichts von der Änderung. Vor kritischen Lesevorgängen ggf. explizit invalidieren.
# Kompletten Cache verwerfen
Clear-EulandaRegistryCache

# Nur einen Subtree invalidieren
Clear-EulandaRegistryCache -Path '\MODULES\Grundwerte\Xfacture'

Im LegacyStore sind beide Calls ein No-Op (es gibt ja keinen Cache).

Wann relevant? #

Für einzelne Skripte, die Registry nur ein paar Mal anfassen, merkt man den Unterschied nicht. Spürbar wird der Cache in drei Situationen:

  1. Lange Pipelines, die dutzende Registry-Werte aus dem Firmenstamm, aus Plugin-Configs und aus Grundwerten lesen (z.B. Rechnungs-Export, Shopify-Sync) – hier spart der Cache viele Sekunden.
  2. VPN-Verbindungen, bei denen jeder SQL-Roundtrip 50–200 ms kostet.
  3. Unit-Tests gegen eine echte DB, wenn einzelne Tests die Registry verändern und andere Tests denselben Wert danach lesen – hier den Cache am Anfang/Ende explizit invalidieren, sonst liest man veraltete Werte.
Init-Block beim Modul-Laden. Der interne RegStore wird im Normalfall beim ersten Import-Module automatisch initialisiert. In Spezialszenarien (z.B. Modul-Reload mit Import-Module -Force aus Plugin-Ketten) kann Initialize-EulRegStore auch manuell aufgerufen werden, um den Init-Block sicher durchlaufen zu lassen.