2015-03-03 15 views
5

Analiza wydajności naszej aplikacji wykazała, że ​​wykorzystanie procesora osiągało szczyt w momencie, gdy pamięć musiała być przydzielona przez zarządzanie pamięcią .NET.Zarządzanie pamięcią dla aplikacji .NET (wpf)

Była (ogromna) ilość pamięci po prostu za darmo, ale nie została zgłoszona przez aplikację, szukała wolnego miejsca w deklarowanej już części pamięci.

Czy można skonfigurować aplikację, aby żądała większej ilości pamięci, jeśli jest to możliwe?
Czy jest to prawdopodobnie związane z faktem, że aplikacja jest hostowana pod Citrix?

+0

Co masz na myśli mówiąc "była ogromna ilość pamięci po prostu za darmo?" Czy masz na myśli to, że faktycznie został zwolniony, tj. Przez 'VirtualFree', czy GC po prostu skompaktował jedno z SOH? Czy twoja powolna alokacja jest na LOH lub SOH? –

+0

Liczniki wydajności pokazały, że na serwerze Citrix maksymalnie ok. 20% pamięci Citrix było w użyciu w tym procesie. Zastanawiam się, dlaczego proces nie używa np. 30-40%? Niestety LOH/SOH nie znajduje się w tych danych wydajności. – Gerard

+1

Czy jest to proces 32- lub 64-bitowy? Czy mógłbyś podać rzeczywiste liczby w pytaniu? Pomoże to w zrozumieniu, jakie ograniczenia możesz uderzyć. – codekaizen

Odpowiedz

1

Aplikacje Windows nie mogą rosnąć w nieskończoność, bez względu na to, ile pamięci ma system.

Możesz przeczytać o rzeczywistych ograniczeń tutaj: https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx#memory_limits

i dodatkowe informacje o problemie tutaj: http://www.codeproject.com/Articles/483475/Memory-Limits-in-a-NET-Process

Jeśli aplikacja staje się zbyt blisko jego granicy, będzie ona rozpocząć przędzenie spędzaj Garbage Collector musi zdobyć nową pamięć, aby uniknąć braku miejsca i awarii z OutOfMemoryException. Ten dodatkowy wysiłek, aby uwolnić i zdobyć pamięć w tym samym czasie, ma również wielki negatywny wpływ na wydajność.

W którym momencie twoja aplikacja przestaje ubiegać się o nową pamięć? Blisko 1 GB? 2 Gb? 64-bitowe aplikacje mogą korzystać z większej ilości pamięci, ale może nie być to opcja ...