Megosztás:


Memóriahasználat elemzése kiadási buildekben (C#, Visual Basic, C++, F#)

A memóriahasználati eszköz figyeli az alkalmazás memóriahasználatát. Az eszközzel tanulmányozhatja a Visual Studióban aktívan fejlődő forgatókönyvek valós idejű memóriahatásait. Részletes pillanatképeket készíthet az alkalmazás memóriaállapotáról, és összehasonlíthatja a pillanatképeket a memóriaproblémák kiváltó okainak megkereséséhez. A memóriahasználati eszköz .NET-, ASP.NET-, C++- vagy vegyes módú (.NET és natív) alkalmazásokban támogatott.

A memóriahasználati eszköz futtatható végleges vagy hibakeresési változatokon. Ebben a cikkben bemutatjuk, hogyan használhatja a Memóriahasználat eszközt a Visual Studio Performance Profiler, amely kiadási buildekhez ajánlott. Az igényeinek leginkább megfelelő memóriaelemző eszköz kiválasztásáról további információt Memóriaelemző eszköz kiválasztásacímű témakörben talál.

A dokumentációval kapcsolatos legjobb élmény érdekében válassza ki az előnyben részesített fejlesztési nyelvet vagy futtatókörnyezetet a cikk tetején található listából.

Memóriahasználat diagnosztikai munkamenetek

Memóriahasználat diagnosztikai munkamenetének indítása:

  1. Projekt megnyitása a Visual Studióban.

    A Memóriahasználat eszköz támogatja a .NET, ASP.NET, C++ vagy vegyes módú (.NET és natív) alkalmazásokat.

  2. A Hibakeresés menüben állítsa a megoldáskonfigurációt kiadásra , és válassza ki az üzembehelyezési célt.

    Az üzembehelyezési cél általában megegyezik a projekt nevével, amely egy helyi üzembe helyezést jelez.

  3. A menüsávon válassza Hibakeresés>Teljesítményprofil-lehetőséget.

  4. Az Elérhető eszközökmenüben válassza a Memóriahasználatlehetőséget, és utána a Startlehetőséget.

    ! [MEGJEGYZÉS] Egyes projekttípusoknál, például a CMake-hez, az indítási célértéket végrehajthatóra kell állítania. További információ: Mely eszközök támogatottak a projektemben?

Memóriahasználat figyelése

Amikor elindít egy diagnosztikai munkamenetet, elindul az alkalmazás, és a Diagnosztikai eszközök ablakban megjelenik az alkalmazás memóriahasználatának idővonaldiagramja.

Képernyőkép a Visual Studio Teljesítményprofilozó Diagnosztikai eszközök ablakáról, amelyen az alkalmazás memóriahasználatának idővonaldiagramja látható.

Az idősordiagram az alkalmazás futtatásakor megjeleníti a memória ingadozásait. A gráf csúcsai általában azt jelzik, hogy egyes kódok adatokat gyűjtenek vagy hoznak létre, majd a feldolgozás során elvetik őket. A nagy kiugró értékek az optimalizálható területeket jelölik. A fő probléma a memóriahasználat növekedése, amelyet nem adnak vissza. Ez nem hatékony memóriahasználatot vagy akár memóriavesztést is jelezhet.

Pillanatképek készítése az alkalmazás memóriaállapotáról

Az alkalmazások nagy számú objektumot használnak, és érdemes lehet az elemzést egy forgatókönyvre összpontosítani. Vagy memóriaproblémákat is találhat, amelyek kivizsgálására van szükség. A diagnosztikai munkamenetek során pillanatképeket készíthet a memóriahasználat adott pillanatokban történő rögzítéséhez. A memóriaproblémák megjelenése előtt érdemes lekérni egy alkalmazás alapkonfigurációs pillanatképét. A probléma első előfordulását követően készíthet egy újabb pillanatképet, és további pillanatképeket is, ha meg tudja ismételni a forgatókönyvet.

Pillanatképek gyűjtéséhez válassza a Pillanatkép készítése, amikor rögzíteni akarja a memóriaadatokat.

Pillanatkép készítésének képernyőképe.

A diagnosztikai munkamenet bezárása

Ha jelentés létrehozása nélkül szeretné leállítani a figyelési munkamenetet, zárja be a diagnosztikai ablakot. Ha jelentést szeretne készíteni, amikor végzett a adatgyűjtéssel vagy a pillanatképek készítésével, válassza a Gyűjtemény leállításalehetőséget.

Képernyőkép a gyűjtemény leállításáról.

Ha nem tud adatokat gyűjteni vagy megjeleníteni, olvassa el Profilkészítési hibák elhárítása ésproblémák elhárítása című témakört.

Memóriahasználati jelentések

Az adatgyűjtés leállítása után a memóriahasználati eszköz leállítja az alkalmazást, és megjeleníti a Memóriahasználat áttekintő oldalt.

Képernyőkép a Visual Studio teljesítményprofilozó memóriahasználati eszközének áttekintési oldaláról, amelyen egy memóriahasználati gráf és két pillanatkép panel látható.

Memóriahasználati pillanatképek

A Pillanatkép ablaktáblákban lévő számok az egyes pillanatképek készítésekor a memóriában lévő objektumokat és bájtokat, valamint a pillanatkép és az előző közötti különbséget jelenítik meg.

A számok olyan hivatkozások, amelyek részletes memóriahasználati jelentésnézeteket nyitnak meg az új Visual Studio-ablakokban. Egy pillanatkép részleteiről szóló jelentés bemutatja a típusokat és példányokat egy pillanatképen belül. A pillanatkép-különbség (diff) jelentés két pillanatkép típusait és példányait hasonlítja össze.

A Pillanatkép nézet hivatkozásainak képernyőképe

A C++ esetében a Objektumok (Diff) oszlop neve Foglalások (Diff).

Image Leírás
1. lépés A memória objektumainak teljes száma a pillanatkép készítésekor. Erre a hivatkozásra kattintva megjeleníthet egy pillanatkép-részletjelentést a típuspéldányok száma szerint rendezve.
2. lépés A pillanatképben szereplő memóriaobjektumok teljes száma és az előző pillanatkép közötti különbség. Ezt a hivatkozást választva megjeleníthet egy pillanatkép-jelentést a típuspéldányok teljes számának különbsége szerint rendezve.
3. lépés A pillanatkép készítésekor a memóriában lévő bájtok teljes száma. Erre a hivatkozásra kattintva megjeleníthet egy pillanatkép-részletjelentést a típuspéldányok teljes mérete szerint rendezve.
4. lépés A pillanatképben szereplő memóriaobjektumok teljes mérete és az előző pillanatkép közötti különbség. A pozitív szám azt jelenti, hogy a pillanatkép memóriamérete nagyobb, mint az előző, a negatív szám pedig azt jelenti, hogy a méret kisebb. Alapállapot azt jelenti, hogy az adott pillanatkép az első egy diagnosztikai munkamenet során. Nincs különbség azt jelenti, hogy a különbség nulla. Ezt a hivatkozást választva megjeleníthet egy pillanatkép-jelentést, amely a típusok példányainak teljes méretének különbsége szerint van rendezve.

Kezelt típusok jelentései

Válassza ki az objektumok (Diff) cella aktuális hivatkozását a Memóriahasználat összegzése táblában.

Felügyelt típusú jelentés képernyőképe.

Jegyzet

.NET-kód esetén a Példányok megtekintése ikon (A példány ikonja az Objektumtípus oszlopban) csak a hibakeresővel integrált memóriahasználati eszköz használatakor, vagy halomkép megnyitásakor és a felügyelt memória hibakeresésénekkiválasztásával érhető el.

A felső ablaktáblán a pillanatképben szereplő típusok száma és mérete látható, beleértve azoknak az objektumoknak a méretét, amelyekre a típus hivatkozik (Összméret).

Az alsó panelen található Gyökér fa elérési útjai megjelenítik a felső panelen kijelölt típusra hivatkozó objektumokat. A .NET-szemétgyűjtő csak akkor tisztítja meg az objektumok memóriáját, ha az utolsó, rá hivatkozó típus ki lett adva. A gyökér fa elérési útjainak használatáról további információt A gyökérgyakori elérési útjának elemzése című témakörben talál.

A Hivatkozott típusok fa megjeleníti a felső panelen kiválasztott típus által tárolt hivatkozásokat.

Hivatkozott objektumok jelentésének képernyőképe.

Jelentésfaszűrők

Az alkalmazások számos típusára nincs szükség az alkalmazásfejlesztők számára a memóriaproblémák kivizsgálásához. A pillanatkép-jelentésszűrők a legtöbb ilyen típust elrejthetik a Felügyelt memória és a Gyökérhez vezető utak fáinál.

Rendezési és szűrési beállítások

  • A fa típusnév szerinti szűréséhez írja be a nevet a Szűrő mezőbe. A szűrő nem megkülönbözteti a kis- és nagybetűket, és felismeri a megadott sztringet a típusnév bármely részén.

  • A Szűrő legördülő listájában válassza a Csak a saját kód megjelenítése lehetőséget a legtöbb külső kód példányának elrejtéséhez. A külső típusok az operációs rendszer vagy a keretrendszer összetevői közé tartoznak, vagy a fordító hozza létre.

  • A Szűrő legördülő listában válassza ki a Kis tárgyak összecsukása lehetőséget, hogy elrejtse azokat a típusokat, amelyek mérete (bájt) kisebb, mint a teljes memória 0,5 százaléka.

Natív típusok jelentései

A Diagnosztikai eszközök ablak Memóriahasználat összefoglaló táblázatában válassza ki a Allokációk (Diff) vagy Halomméret (Diff) cella aktuális hivatkozását.

A Típusnézet megjeleníti a pillanatképben szereplő típusok számát és méretét.

  • A kijelölt típus melletti Példányok megtekintése ikont választva megjelenítheti a pillanatképben a kijelölt típus objektumairól szóló információkat.

    A Példányok nézet a kijelölt típus minden példányát megjeleníti. A példány kiválasztásakor megjelenik az a hívásverem, amely a példány létrehozását eredményezte a Foglalási hívásverem panelen. (Ez az információ csak hibakeresés közben érhető el.)

    A Példányok nézet és az Allokációs hívásverem panel képernyőképe.

  • Válassza a Stacks lehetőséget a kijelölt típus foglalási veremének megtekintéséhez.

    Stacks nézet képernyőképe.

Memóriahasználati elemzések

A felügyelt memória esetében a Memóriaelemzési eszköz több hatékony beépített automatikus elemzést is biztosít. Válassza a Bepillantások lapot a Felügyelt típusok jelentésekben, és megjeleníti a vonatkozó automatikus elemzéseket, például Ismétlődő sztringek, Elvékonyodott tömbök, és Eseménykezelő szivárgások.

Képernyőkép a Memóriahasználat eszköz betekintési nézetéről.

A Duplikált sztringek szakasz azoknak a sztringeknek a listáját jeleníti meg, amelyek többször lesznek lefoglalva a halomra. Ezen kívül ez a szakasz a teljes felesleges memóriát jeleníti meg, azaz (a példányok száma - 1) szorozva a sztring méretével.

A Ritka tömbök szakasz olyan tömböket mutat be, amelyek többnyire nulla elemekkel vannak kitöltve, amelyek teljesítmény és memóriahasználat szempontjából nem hatékonyak. A memóriaelemző eszköz automatikusan észleli ezeket a tömböket, és megmutatja, hogy mennyi memória veszett el a nulla érték miatt.

Az Event Handler Leaks szakasz, amely a Visual Studio 2022 17.9 preview 1-es verziójában érhető el, olyan lehetséges memóriaszivárgásokat mutat be, amelyek akkor fordulhatnak elő, ha egy objektum feliratkozik egy másik objektum eseményére. Ha az esemény közzétevője túllép az előfizetőn, az előfizető életben marad, még akkor is, ha nincs más hivatkozás rá. Ez memóriavesztéshez vezethet, ahol a nem használt memória nincs megfelelően felszabadítva, ami azt eredményezi, hogy az alkalmazás idővel egyre több memóriát használ.

Bizonyos típusokról ismert, hogy olvasható mezőkkel rendelkeznek a natív memória méretének meghatározásához, amit tartanak. A Insights lapon hamis natív memóriacsomópontok láthatók az objektumgráfban, amelyeket a szülőobjektumok őriznek meg, így a felhasználói felület felismeri őket, és megjeleníti a méret- és referenciagráfjukat.

A Memóriahasználat eszköz natív betekintés nézetének képernyőképe.

Változásjelentések (Diff)

  • A Memóriahasználat áttekintése lapon válassza a Pillanatkép panel egyik cellájában található módosítási hivatkozást.

    Képernyőkép a cella változáshivatkozásának kiválasztásáról.

  • Válasszon pillanatképet a felügyelt vagy natív jelentések Összehasonlítás listájában.

    Képernyőkép: Válasszon ki egy pillanatképet az Összehasonlítás listából.

A változásjelentés oszlopokat ((Diff)) ad hozzá az alapjelentéshez, amelyek az alappillanat-érték és az összehasonlító pillanatkép közötti különbséget mutatják. A natív típusú nézet diff jelentése a következőképpen nézhet ki:

Natív típusok Diff nézetének képernyőképe. Natív típusok

A felső ablaktáblán a pillanatképben szereplő típusok száma és mérete látható, beleértve azoknak az objektumoknak a méretét, amelyekre a típus hivatkozik (Összméret).