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
| Modus | Beschreibung |
|---|---|
| LegacyStore | Jeder Get-EulandaRegistryValue führt direkt einen Stored-Proc-Call aus. Kein Cache, kein State in der Session. |
| HiveStore | Ein 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:
| Wert | Effekt |
|---|---|
off | LegacyStore (immer direkter SQL-Call) |
on oder nicht gesetzt | HiveStore (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:
- 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.
- VPN-Verbindungen, bei denen jeder SQL-Roundtrip 50–200 ms kostet.
- 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 erstenImport-Moduleautomatisch initialisiert. In Spezialszenarien (z.B. Modul-Reload mitImport-Module -Forceaus Plugin-Ketten) kannInitialize-EulRegStoreauch manuell aufgerufen werden, um den Init-Block sicher durchlaufen zu lassen.