Megosztás a következőn keresztül:


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 Studio 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álható a memóriahasználati eszköz a Visual Studio Performance Profiler, amely a 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. Nyisson meg egy projektet a Visual Studio.

    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 project nevével, amely egy helyi üzembe helyezést jelez.

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

  1. A Rugalmas lapon válassza a Memóriahasználat, majd a Start lehetőséget.

    Képernyőkép, amely a Memóriahasználat opciót és a Start gombot mutatja.

  1. Az Elérhető eszközökmenüben válassza a Memóriahasználatlehetőséget, és utána a Startlehetőséget. Memóriahasználat diagnosztikai munkamenetének indítása.

Jegyzet

Egyes project-típusok, például a CMake esetében az indítási célértéket Executable értékre kell állítania. További információ: Milyen eszközök támogatottak a project?.

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.

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

A Diagnosztikai eszközök ablak képernyőképe a Visual Studio Teljesítményprofilozóban, 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.

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.

A memóriahasználati eszköz áttekintési lapjának képernyőképe a Visual Studio Teljesítményprofilerben, amely egy memóriahasználati gráfot és négy pillanatképpanelt jelenít meg.

A memóriahasználati eszköz áttekintési oldalának képernyőképe a Visual Studio Teljesítményprofilerben, amely egy memóriahasználati grafikont és két pillanatkép-panelt jelenít meg.

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 Memory Usage 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épeA Pillanatkép nézet hivatkozásai

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

Image Leírás
1. lépésFolyamat útmutató-1 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ésFolyamat útmutató-2 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ésFolyamat útmutató-3 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ésFolyamat útmutató-4 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.felügyelt típusú jelentés

Jegyzet

.NET kód esetén: a Nézet részletei ikon (Az Objektumtípus oszlop példányikonja) csak a debugger-integrált Memóriahasználat eszköz használatakor vagy amikor megnyit egy memóriakupac pillanatképet, és kiválasztja a Felügyelt memória hibakeresése lehetőséget érhető el.

A felső ablaktáblán a pillanatképben szereplő típusok száma és mérete látható, beleértve a típus által hivatkozott összes objektum méretét (Teljes mé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 egy objektum memóriáját, ha az utolsó, rá hivatkozó típus ki lett adva. A Gyökérhez vezető útvonalak fa használatáról több információt a Gyökérhez vezető forró útvonalelemzése című részben talál.

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

Jegyzet

.NET kód esetén a View Instances ikon (Az Objektumtípus oszlop példányikonja) csak akkor érhető el, ha a hibakeresővel integrált Memóriahasználati eszközt használja, vagy amikor megnyit egy halom pillanatképet, és kiválasztja a Felügyelt memória hibakeresése lehetőséget.

A felső ablaktáblán a pillanatképben szereplő típusok száma és mérete látható, beleértve a típus által hivatkozott összes objektum méretét (Teljes mé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 egy objektum memóriáját, ha az utolsó, rá hivatkozó típus ki lett adva. A Gyökérhez vezető útvonalak fa használatáról több információt a Gyökérhez vezető forró útvonalelemzése című részben talál.

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

A hivatkozott objektumok jelentésének képernyőképe.

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

A 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ásokMemóriahasználat rendezése és szűrése

  • 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.

Natív típusú nézet képernyőképe.

Natív típusú nézet képernyőképe.

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

  • A kiválasztott típus melletti Részletek megtekintése ikont választva megjelenítheti a pillanatképben a kiválasztott 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.

  • 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 kiválasztott típus kiosztási veremének megtekintéséhez.

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

  • Válassza a Stacks lehetőséget a kiválasztott típus kiosztá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álati eszköz betekintési nézetéről.Memóriahasználati betekintés

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

A Duplikált karakterláncok szakasz azon karakterláncok listáját jeleníti meg, amelyek többször lefoglalásra kerülnek a halomba. 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.

A Event Handler Leaks szakasz, amely Visual Studio 2022 17.9-es előzetes verzióban érhető el, olyan memóriavesztéseket mutat be, amelyek akkor fordulhatnak elő, ha egy objektum feliratkozik egy másik objektum eseményére. Ha az esemény kiadója túléli az előfizetőt, az előfizető életben marad, még akkor is, ha nincs rá más hivatkozás. 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ési nézetének képernyőképe.memóriahasználat eszköz natív betekintési nézetét

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 egy felügyelt vagy natív jelentés összehasonlítási listájában.

    Képernyőkép a Compare with list (Összehasonlítás a listával) listáról.

    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 Különbségi nézetének képernyőképe. Natív típusokKülönbségi nézet

Natív típusok Különbségi nézetének képernyőképe. Natív típusokKülönbségi nézet

A felső ablaktáblán a pillanatképben szereplő típusok száma és mérete látható, beleértve a típus által hivatkozott összes objektum méretét (Teljes méret).