Udostępnij za pośrednictwem


Kopiowanie w tle zestawów

Uwaga / Notatka

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

Kopiowanie cieniowe umożliwia aktualizowanie zestawów używanych w domenie aplikacji bez rozładowania domeny aplikacji. Jest to szczególnie przydatne w przypadku aplikacji, które muszą być stale dostępne, takie jak witryny ASP.NET.

Ważne

Kopiowanie w tle nie jest obsługiwane w aplikacjach ze Sklepu Windows 8.x.

Środowisko .NET blokuje plik zestawu, gdy zestaw jest załadowany, więc nie można zaktualizować pliku do czasu jego rozładowania. Jedynym sposobem zwolnienia zestawu z domeny aplikacji jest zwolnienie domeny aplikacji, więc w normalnych okolicznościach nie można zaktualizować zestawu na dysku do czasu zwolnienia wszystkich domen aplikacji, które z niej korzystają.

Gdy domena aplikacji jest skonfigurowana do kopiowania plików w tle, zestawy ze ścieżki aplikacji są kopiowane do innej lokalizacji i ładowane z tej lokalizacji. Kopia jest zablokowana, ale oryginalny plik zestawu jest odblokowany i można go zaktualizować.

Ważne

Jedynymi zestawami, które można kopiować w tle, są te przechowywane w katalogu aplikacji lub jego podkatalogach, określone przez właściwości ApplicationBase i PrivateBinPath podczas konfigurowania domeny aplikacji. Zestawy przechowywane w globalnej pamięci podręcznej zestawów nie są kopiowane cieniowo.

Ten artykuł zawiera następujące sekcje:

  • Włączanie i używanie kopiowania w tle opisuje podstawowe użycie i opcje dostępne do kopiowania w tle.

  • Wydajność uruchamiania opisuje zmiany wprowadzone w kopiowaniu w tle w programie .NET Framework 4 w celu zwiększenia wydajności uruchamiania oraz jak przywrócić zachowanie wcześniejszych wersji.

  • Przestarzałe metody opisują zmiany wprowadzone we właściwościach i metodach sterujących kopiowaniem w tle w programie .NET Framework 2.0.

Włączanie i używanie kopiowania w tle

Można użyć właściwości klasy AppDomainSetup w następujący sposób, aby skonfigurować domenę aplikacji na potrzeby kopiowania w tle:

  • Włącz kopiowanie w tle, ustawiając właściwość ShadowCopyFiles na wartość ciągu "true".

    Domyślnie to ustawienie powoduje skopiowanie wszystkich zestawów w ścieżce aplikacji do pamięci podręcznej pobierania przed ich załadowaniem. Jest to ta sama pamięć podręczna przechowywana przez środowisko uruchomieniowe języka wspólnego do przechowywania plików pobranych z innych komputerów, a środowisko uruchomieniowe języka wspólnego automatycznie usuwa pliki, gdy nie są już potrzebne.

  • Możesz opcjonalnie ustawić lokalizację dostosowaną dla plików kopiowanych w tle przy użyciu właściwości CachePath i ApplicationName.

    Ścieżka podstawowa lokalizacji jest tworzona przez połączenie właściwości ApplicationName z właściwością CachePath, tworząc tym samym podkatalog. Zestawy są kopiowane w postaci cieni do podkatalogów tej ścieżki, a nie do samej ścieżki bazowej.

    Uwaga / Notatka

    Jeśli właściwość ApplicationName nie jest ustawiona, właściwość CachePath jest ignorowana, a używana jest pamięć podręczna pobierania. Nie jest zgłaszany żaden wyjątek.

    Jeśli określisz lokalizację niestandardową, odpowiadasz za czyszczenie katalogów i skopiowanych plików, gdy nie są już potrzebne. Nie są one usuwane automatycznie.

    Istnieje kilka powodów, dla których możesz chcieć ustawić niestandardową lokalizację dla plików z kopii zapasowej. Możesz ustawić lokalizację niestandardową dla kopiowanych plików w tle, jeśli aplikacja generuje dużą liczbę kopii. Pamięć podręczna pobierania jest ograniczona przez rozmiar, a nie okres istnienia, więc możliwe, że środowisko uruchomieniowe języka wspólnego podejmie próbę usunięcia pliku, który jest nadal używany. Innym powodem ustawiania lokalizacji niestandardowej jest to, że użytkownicy, którzy uruchamiają aplikację, nie mają dostępu do zapisu do lokalizacji katalogu używanej przez środowisko uruchomieniowe języka wspólnego dla pamięci podręcznej pobierania.

  • Możesz opcjonalnie ograniczyć zestawy kopiowane metodą kopiowania w cieniu, używając właściwości ShadowCopyDirectories.

    Po włączeniu kopiowania cienia dla domeny aplikacji domyślnie kopiowane są wszystkie zestawy w ścieżce aplikacji, czyli w katalogach określonych przez właściwości ApplicationBase i PrivateBinPath. Kopiowanie do wybranych katalogów można ograniczyć, tworząc ciąg zawierający tylko te katalogi, które chcesz skopiować w tle, i przypisując ciąg do ShadowCopyDirectories właściwości . Rozdziel katalogi średnikami. Jedynymi zestawami, które są kopiowane w tle, są te w wybranych katalogach.

    Uwaga / Notatka

    Jeśli nie przypiszesz ciągu do ShadowCopyDirectories właściwości lub jeśli ustawisz tę właściwość na null, wszystkie zestawy w katalogach określonych przez ApplicationBase i PrivateBinPath będą kopiowane w tle.

    Ważne

    Ścieżki katalogów nie mogą zawierać średników, ponieważ średnik jest znakiem dzielnika. Nie ma znaku ucieczki dla średników.

Wydajność uruchamiania systemu

Po uruchomieniu domeny aplikacji korzystającej z kopiowania w tle następuje opóźnienie podczas kopiowania zestawów w katalogu aplikacji do katalogu kopii w tle lub weryfikowania, czy znajdują się one już w tej lokalizacji. Przed programem .NET Framework 4 wszystkie zestawy zostały skopiowane do katalogu tymczasowego. Każdy zestaw został otwarty w celu zweryfikowania nazwy zestawu, a silna nazwa została zweryfikowana. Każdy zestaw został sprawdzony, czy został on zaktualizowany ostatnio niż kopia w katalogu kopii w tle. Jeśli tak, został skopiowany do katalogu kopii zapasowych. Na koniec kopie tymczasowe zostały odrzucone.

Począwszy od programu .NET Framework 4, domyślne zachowanie uruchamiania polega na bezpośrednim porównywaniu daty i godziny każdego zestawu w katalogu aplikacji z datą i godziną kopiowania plików w katalogu kopii w tle. Jeśli zestaw został zaktualizowany, jest kopiowany przy użyciu tej samej procedury co we wcześniejszych wersjach programu .NET Framework; w przeciwnym razie zostanie załadowana kopia w katalogu kopii w tle.

Wynikowa poprawa wydajności jest największa w przypadku aplikacji, w których zestawy nie zmieniają się często, a zmiany zwykle występują w małym podzestawie zestawów. Jeśli większość zestawów w aplikacji często się zmienia, nowe domyślne zachowanie może spowodować regresję wydajności. Możesz przywrócić zachowanie uruchamiania poprzednich wersji programu .NET Framework, dodając <element shadowCopyVerifyByTimestamp> do pliku konfiguracji za pomocą polecenia enabled="false".

Przestarzałe metody

Klasa AppDomain ma kilka metod, takich jak SetShadowCopyFiles i ClearShadowCopyPath, które mogą służyć do kontrolowania kopiowania w tle w domenie aplikacji, ale zostały one oznaczone jako przestarzałe w programie .NET Framework w wersji 2.0. Rekomendowany sposób konfiguracji domeny aplikacji do kopiowania cieniowego polega na użyciu właściwości klasy AppDomainSetup.

Zobacz także