Udostępnij przez


Konfigurowanie odzyskiwania pamięci platformy .NET

Aby zapewnić dobrą wydajność, ważne jest, aby prawidłowo skonfigurować zbieranie nieużywanych obiektów platformy .NET dla procesu w silosie. Na podstawie ustaleń zespołu najlepszym połączeniem ustawień jest gcServer=true i gcConcurrent=true. Te wartości można skonfigurować w projekcie języka C# (csproj) lub plikuapp.config . Aby uzyskać więcej informacji, zobacz Flavors of garbage collection (Smaki odzyskiwania pamięci).

.NET Core i .NET 5+

Ta metoda nie jest obsługiwana dla projektów typu SDK kompilujących się przeciwko pełnej wersji .NET Framework.

<PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
    <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>

Środowisko .NET Framework

Projekty w stylu zestawu SDK kompilujące się względem pełnego programu .NET Framework powinny nadal używać tego stylu konfiguracji. Rozważmy przykładowy plik XMLapp.config :

<configuration>
    <runtime>
        <gcServer enabled="true"/>
        <gcConcurrent enabled="true"/>
    </runtime>
</configuration>

Nie jest to jednak tak proste, jeśli silos działa w ramach roli procesu roboczego platformy Azure, która domyślnie korzysta ze stacji roboczej GC. Istotny wpis na blogu omawia, jak ustawić taką samą konfigurację dla roli Worker w Azure; zobacz Tryb zbierania śmieci dla serwera w Azure.

Ważne

Zbieranie śmieci serwera jest dostępne tylko na komputerach wieloprocesorowych. W związku z tym, nawet jeśli skonfigurujesz zarządzanie pamięcią za pośrednictwem pliku csproj aplikacji lub skryptów w wymienionym wpisie na blogu, nie uzyskasz korzyści z gcServer=true, jeśli silos działa na maszynie (wirtualnej) z jednym rdzeniem. Aby uzyskać więcej informacji, zobacz uwagi GCSettings.IsServerGC.