In einem Windows 7 (oder Server) Feld haben wir einen Ordner auf einer UNC Freigabe (Cross Machine UNC, nicht localhost). Wir benennen diesen Ordner um und prüfen dann am neuen Speicherort, ob eine Datei vorhanden ist. Obwohl es vorhanden ist, dauert es fast 5 Sekunden, bis File.Exists True zurückgibt.
Vollständige Repro finden Sie auf Ссылка . Hier ist der Kerncode:
%Vor%Es scheint also so, als ob die anfängliche Existenzprüfung bewirkt, dass der Existenzwert zwischengespeichert wird, was dieses Scheinverhalten verursacht.
Fragen : Was ist die Erklärung dafür? Was ist der beste Weg, um es zu vermeiden?
HINWEIS : Dieses Problem trat anfänglich bei Verwendung von npm (Node Package Manager) unter Windows auf. Der Code, den ich hier habe, ist ein C # -Port der Repro. Siehe Ссылка für das ursprüngliche Node / npm Problem. Das Ziel ist, einen Weg zu finden, um es anzugehen.
David, Der Redirector implementiert einen negativen "Datei nicht gefunden" -Cache, der verhindert, dass ein Client einen Server mit nicht gefundenen Dateien überflutet. Die Standard-Cache-Zeit beträgt 5 Sekunden. Sie können jedoch den Registrierungswert FileNotFoundCacheLifetime ändern, um den Cache zu steuern oder ihn zu deaktivieren, indem Sie diesen Wert auf 0 setzen.
Details: Ссылка
Im Netzwerkcode gibt es mehrere Caching-Ebenen. Dies könnte die Zeit, in der die Dateiexistenz endlich angezeigt wird, verlangsamen.
Eine Lösung wäre, keine Dateifreigaben zu verwenden, sondern eine einfache Client / Server-Architektur zu erstellen, bei der der Server die Dateiexistenz vom lokalen Dateisystem zurückgibt. Das sollte die Itemerkennung beschleunigen.
Wenn Sie versuchen, die Datei zu öffnen, auch wenn File.Exists sagt, dass sie noch nicht existiert, sollte sie korrekt geöffnet werden, damit Sie die Server-Existenzinformationen verwenden können. Wenn das nicht funktioniert, können Sie der Server / Client-Architektur einfach eine Download-Option hinzufügen.