Freigeben über


Namenscacheverwaltung

Die NAME_CACHE-Struktur speichert die Namenszeichenfolgen der zuletzt auf dem Server ausgeführten Vorgänge zwischen, sodass der Client redundante Anforderungen unterdrücken kann. Wenn beispielsweise eine offene Anforderung kürzlich mit der Meldung "Datei nicht gefunden" fehlgeschlagen ist und die Clientanwendung die offene Anforderung erneut mit einer Großbuchstabenzeichenfolge versucht und der Netzwerkminiumleitung keine Namen unterstützt, bei denen die Groß-/Kleinschreibung berücksichtigt wird, kann RDBSS die Anforderung sofort fehlschlagen, ohne den Server zu treffen.

Im Allgemeinen ist der Algorithmus, ein Zeitfenster- und Vorgangsanzahlslimit für den NAME_CACHE Eintrag festzulegen. Das Zeitfenster beträgt in der Regel zwei Sekunden. Wenn also der NAME_CACHE Eintrag größer als zwei Sekunden ist, schlägt die Übereinstimmung fehl, und die Anforderung wird an den Server übertragen. Wenn die Anforderung auf dem Server erneut fehlschlägt, wird der eintrag NAME_CACHE um ein weiteres Zwei-Sekunden-Fenster aktualisiert. Wenn die Anzahl der Anforderungsvorgänge nicht übereinstimmt, wurden mindestens eine Anforderung an den Server gesendet, wodurch dieser NAME_CACHE Eintrag ungültig werden kann. Auch dieser Vorgang wird also an den Server gesendet.

Eine NAME_CACHE-Struktur verfügt über einen öffentlichen Teil, der für den Netzwerkminiumleitungsor, MRX_NAME_CACHE und einen privaten Abschnitt zur ausschließlichen Verwendung durch RDBSS verfügbar gemacht wird. Der Mini-Redirector-Teil verfügt über das Kontextfeld NTSTATUS für das Ergebnis eines vorherigen Servervorgangs für diesen Namenseintrag und einen Kontexterweiterungszeiger für einen zusätzlichen miniumleitungsspezifischen Speicher, der mit der NAME_CACHE-Struktur zugeordnet werden kann. Weitere Informationen finden Sie unter RxNameCacheInitialize.

Für Windows-Netzwerke ist die Anzahl des SMB-Vorgangs ein Beispiel für einen miniumleitungsspezifischen Zustand, der im Kontextfeld von MRX_NAME_CACHE gespeichert werden könnte. Wenn RxNameCacheCheckEntry aufgerufen wird, wird eine Gleichheitsprüfung zwischen dem Kontextfeld und einem angegebenen Parameter durchgeführt, um eine Übereinstimmung im Namenscache zu finden. Wenn ein NAME_CACHE Eintrag erstellt oder aktualisiert wird, ist es der Auftrag des Netzwerkminiumleitungs, einen geeigneten Wert für dieses Feld und die Lebensdauer in Sekunden für den NAME_CACHE Eintrag anzugeben.

Der private RDBSS-Teil der NAME_CACHE-Struktur enthält den Namen als Unicode-Zeichenfolge, einen Hashwert des Namens zum Beschleunigen von Nachschlagevorgängen, eine Ablaufzeit des Eintrags und ein Flag, das angibt, ob der Server Namen unterstützt, bei denen die Groß-/Kleinschreibung berücksichtigt wird.

Die NAME_CACHE_CONTROL-Struktur verwaltet einen Zwischenspeicher für bestimmte Namen. Es verfügt über eine kostenlose Liste, eine aktive Liste und eine Sperre zum Synchronisieren von Updates. Die NAME_CACHE_CONTROL-Struktur verfügt auch über Felder zum Speichern der aktuellen Anzahl NAME_CACHE zugeordneter Einträge, einen Wert für die maximale Anzahl der zuzuordnenden Einträge, die Größe jedes zusätzlichen Netzwerk-Mini-Redirector-Speichers, der für jeden NAME_CACHE-Eintrag verwendet wird, und Werte für Statistiken (die Anzahl der Aktualisierungen, Überprüfungen, Rückgabe einer gültigen Übereinstimmung, und wenn der netzwerk-mini-redirector einen Netzwerkvorgang gespeichert hat). Das Feld MaximumEntries schränkt die Anzahl der NAME_CACHE Einträge ein, die erstellt werden, falls ein schlecht verhaltenes Programm eine große Anzahl von offenen Anforderungen mit fehlerhaften Dateinamen generieren würde, die große Mengen an Arbeitsspeicher verbrauchen.

Derzeit gibt es Namencaches, die von RDBSS für OBJECT_NAME_NOT_FOUND verwaltet werden. Für diesen Namenscache wird ein Zwei-Sekunden-Fenster beibehalten, das ungültig wird, wenn ein Vorgang an den Server gesendet wird. Dies kann passieren, wenn die Clientanwendung eine Datei (sample1) geöffnet hat, die eine Anwendung auf dem Server verwenden könnte, um die Erstellung einer anderen Datei (sample2) auf dem Server zu signalisieren. Wenn der Client die erste Datei (sample1) liest und erkennt, dass die zweite Datei (sample2) auf dem Server erstellt wurde, kann ein Treffer im Namenscache, der mit der zweiten Datei (sample2) übereinstimmt, keinen Fehler zurückgeben. Diese Optimierung behandelt nur den Fall von aufeinanderfolgenden Dateiöffnungsvorgängen für dieselbe Datei, die noch nicht vorhanden ist. Dieses Szenario erfolgt mithilfe von Microsoft Word.

Die RDBSS-Verwaltungsroutinen für den Namencache umfassen Folgendes:

-Routine zurückgegebener Wert BESCHREIBUNG

RxNameCacheActivateEntry

Diese Routine nimmt einen Namenscacheeintrag an und aktualisiert die Ablaufzeit und den Netzwerkminiumleitungskontext. Anschließend wird der Eintrag in die aktive Liste aufgenommen.

RxNameCacheCheckEntry

Diese Routine überprüft einen NAME_CACHE Eintrag auf Gültigkeit.

RxNameCacheCreateEntry

Diese Routine ordnet eine NAME_CACHE-Struktur mit der angegebenen Namenszeichenfolge zu und initialisiert sie. Es wird erwartet, dass der Aufrufer dann alle zusätzlichen Netzwerkminiumleitungselemente des Namenscachekontexts initialisiert und den Eintrag dann in die Aktive Namenscacheliste eingibt.

RxNameCacheExpireEntry

Mit dieser Routine wird ein NAME_CACHE Eintrag in die kostenlose Liste aufgenommen.

RxNameCacheExpireEntryWithShortName

Diese Routine läuft alle NAME_CACHE Einträge ab, deren Namenspräfix mit dem angegebenen kurzen Dateinamen übereinstimmt.

RxNameCacheFetchEntry

Diese Routine sucht nach einer Übereinstimmung mit einer angegebenen Namenszeichenfolge für einen NAME_CACHE Eintrag.

RxNameCacheFinalize

Diese Routine gibt den Speicher für alle NAME_CACHE Einträge frei, die einer NAME_CACHE_CONTROL-Struktur zugeordnet sind.

RxNameCacheFreeEntry

Diese Routine gibt den Speicher für einen NAME_CACHE-Eintrag frei und erhöht die Anzahl NAME_CACHE Cacheeinträge, die einer NAME_CACHE_CONTROL-Struktur zugeordnet sind.

RxNameCacheInitialize

Diese Routine initialisiert einen Namenscache (eine NAME_CACHE_CONTROL-Struktur).