Mamy sytuację, w której rozważamy wymuszenie zbierania śmieci na serwerze, który ma bardzo mało pamięci RAM (średnio 3,6/4 GB). Nie, to naprawdę nie jest opcja, aby niestety zaktualizować ten serwer.. Usuwanie śmieci .NET - na co wpływa?
Jeden z naszych procesów serwisowych (napisany pośrednio w C++ (nie pytaj ...)) działa z komponentami .NET, a następnie śpi przez 10 minut. Kiedy usługa ta jest uśpiona, często zawiesza się na 600 MB pamięci RAM, którą można dzielić z innymi procesami. Wydaje się, że w jakiś sposób wiąże się to z włączaniem śledzenia GPW w celu debugowania. Mogę obejrzeć, jak się budzi i GC w następnej iteracji na pierwszym wywołaniu COM do .NET - jednak wtedy proces działa i po przejściu do trybu uśpienia użycie pamięci RAM powraca około 600 MB ... cóż, można zobaczyć, gdzie to idzie ...
Pytanie: Zastanawiam się nad dodaniem kolekcji śmieci tuż przed przejściem procesu uśpienia. W tym polu są inne usługi, które wykonują zadania związane z .NET. Kiedy wywołuję kolekcję śmieci w tym procesie obsługi, czy ta GC wpływa na wszystkie inne procesy związane z technologią .NET w polu lub po prostu proces żądający kolekcji? Trochę martwię się o problem z wydajnością dla procesów poza tym, na którym mi zależy.
Odkładając na bok, jeśli przechowujesz 600 MB zasobów zarządzanych .NET przez 10 minut, zmuszając wywóz śmieci może nie uwolnić zasobów. Mogą nadal być w posiadaniu czegoś w samym procesie .NET. Czy na pewno nie masz żadnych aktywnych odnośników do tych zasobów? –
Istnieje aktywne odniesienie do klasy wywołującej usługi sieci Web. Jednak kod C++ wywołuje funkcję po stronie .NET, która zwraca ciąg znaków. W klasie nie ma żadnych globalnych vars. Wszystkie zmienne powinny wykraczać poza zakres, gdy tylko wywołanie WS zostanie zakończone, a łańcuch zostanie zwrócony z powrotem do aplikacji C++. – TheToasterThatCould
chciałem podziękować wszystkim, którzy przyczynili się ... jesteście niesamowici !! – TheToasterThatCould