Jump to content

Modding CS2: Schimbari Garbage Collector C#


Recommended Posts

Posted

Garbage Collector C#: Modding CS2

Intrucat nu am avut parte de mult timp liber, revin cu postarea despre garbage collector-ul din C# la peste 2 ani distanta de la implementarea solutiilor pe serverele fairside. Schimbarile se pot porta pe majoritatea solutiilor de modding existente pe Counter-Strike 2 (C#-based), daca nu chiar pe toate, in functie de limbaj.

 

Garbage Collector Tweaking

Documentatie relevanta: https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/

Avand in vedere problemele de memorie identificate in framework-urile de modding de pe CS2 si lipsa unui consum predictibil, am realizat schimbari la solutia de modding adoptata, schimbari care implementeaza fix-uri reliable si aplaneaza situatiile descoperite, iar pe langa asta ofera un control mai mare pentru partea de consum de memorie. Cumulativ, am realizat un plugin CS2 pentru tweaking Garbage Collector C#. Acest plugin depinde de implementarile noastre din varianta recompilata a framework-ului de modding pentru serverele fairside. Tineti cont ca nu recomandam rularea pluginului in productie fara recompilarea solutiei de modding cu schimbarile semnificative pe care le-am realizat. Mentionez de asemenea faptul ca pluginul foloseste functia GC.Collect in diverse cazuri.

 


GC.Collect func params:

  • generation — The number of the oldest generation to be garbage collected.
  • mode — An enumeration value that specifies whether the garbage collection is forced (Default or Forced) or optimized (Optimized).
  • blocking — true to perform a blocking garbage collection; false to perform a background garbage collection where possible.
  • compacting — true to compact the small object heap; false to sweep only.

 

Caracteristici cheie comportament Garbage Collector:

  • Alterare mod de functionare la runtime
  • Custom-made events for Garbage Collection
  • Control granular blocking
  • Control granular compacting
  • Control granular GC.MaxGeneration

 

Pe anumite servere fairside rulam cu succes solutia de modding recompilata cu tot cu pluginul de tweaking C# Garbage Collector.

Nu recomandam sub nici o forma schimbari la Garbage Collector in productie daca nu se altereaza codul de la framework-ul de modding.

 

Microsoft: C# Garbage Collector

Tineti cont de urmatoarele:

  • Nu recomandam sa rulati haotic GC.Collect daca nu stiti ce presupune.
  • Nu recomandam modificarea comportamentului de garbage collection in afara cazurilor exceptionale. Asigurati-va ca sunteti constienti de ceea ce implica treaba asta.

 

Mai departe voi lasa un quote direct de pe pagina Microsoft (link mentionat la inceputul topicului):

 

Quote

.NET's garbage collector manages the allocation and release of memory for your application. Each time you create a new object, the common language runtime allocates memory for the object from the managed heap. As long as address space is available in the managed heap, the runtime continues to allocate space for new objects. However, memory is not infinite. Eventually the garbage collector must perform a collection in order to free some memory. The garbage collector's optimizing engine determines the best time to perform a collection, based upon the allocations being made. When the garbage collector performs a collection, it checks for objects in the managed heap that are no longer being used by the application and performs the necessary operations to reclaim their memory.

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...