Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az esettanulmány bemutatja, hogyan használható a Visual Studio profilkészítési eszközei egy mintaalkalmazás teljesítményproblémáinak azonosítására és megoldására ASP.NET. A profilkészítési eszközök összehasonlításához lásd: Melyik eszközt válasszam?
Az oktatóanyagból a következőket sajátíthatja el:
- A Visual Studio profilkészítési eszközeinek használata az alkalmazás teljesítményének elemzéséhez.
- Profilkészítési adatok értelmezése szűk keresztmetszetek megtalálásához.
- Gyakorlati stratégiák a kód .NET-számlálókkal, hívásszámokkal és időzítési adatokkal való optimalizálásához.
Alkalmazza ezeket a technikákat saját alkalmazásai fejlesztéséhez.
Teljesítményproblémák esettanulmányának elkülönítése
A minta ASP.NET alkalmazás lekérdezéseket futtat szimulált adatbázison, és a diagnosztikai mintán alapul.
Fő teljesítménytünetek:
- Alacsony processzorhasználat: Nem a cpu a szűk keresztmetszet.
- Magas ThreadPool-szálszám: A szálak száma folyamatosan emelkedik, ami azt jelzi, hogy a szálkészlet éhezik.
- Lassú alkalmazásválasz: Az alkalmazás lassan válaszol a rendelkezésre álló szálak hiánya miatt.
Ez az esettanulmány a Visual Studio profilkészítési eszközeivel rögzíti és kezeli ezeket a problémákat, így gyorsabban és hatékonyabbá teheti a kódot.
Kihívás
A problémák megoldása több kihívást is magában foglal:
- Szűk keresztmetszetek diagnosztizálása: Az alacsony processzorhasználat lassú teljesítmény mellett több oka is lehet. A profilkészítési eszközök hatékony használata és kimenetük értelmezése elengedhetetlen.
- Tudás- és erőforráskorlátok: A profilkészítés és az optimalizálás speciális készségeket és tapasztalatokat igényel, amelyek nem mindig érhetők el.
A profilkészítési eszközöket, a műszaki ismereteket és a gondos tesztelést kombináló stratégiai megközelítés kulcsfontosságú ezeknek a kihívásoknak a leküzdéséhez.
Stratégia
Ebben az esettanulmányban a megközelítés magas szintű nézete látható:
- Kezdje a .NET számlálómetrikáinak figyelésével a teljesítményadatok gyűjtése közben. A Visual Studio .NET Counters eszköze jó kiindulópont.
- A mélyebb elemzések érdekében gyűjtsön nyomkövetéseket további profilkészítési eszközökkel, például a hívásszámlálási és időzítési adatokhoz használható Instrumentation eszközzel.
Az adatgyűjtéshez a következő feladatok szükségesek:
- Állítsa be az alkalmazást release buildre.
- Válassza ki a .NET Számlálók eszközt a Teljesítményprofil-kezelőben (Alt+F2).
- Indítsa el az alkalmazást, és gyűjtsön egy nyomkövetést.
Teljesítményszámlálók ellenőrzése
Az alkalmazás futtatása közben megfigyeljük a számlálókat a .NET Számlálók eszközben. A kezdeti vizsgálatokhoz néhány fontos metrikát érdemes szem előtt tartani:
-
CPU Usage. Ebből a számlálóból megtudhatja, hogy magas vagy alacsony processzorhasználattal kapcsolatos teljesítményproblémák lépnek-e fel. Ez a teljesítményproblémák bizonyos típusaira utalhat. Például:- Magas processzorhasználat esetén a CPU-használat eszközzel azonosíthatja azokat a területeket, ahol optimalizálni tudjuk a kódot. Erről a Esettanulmány: Kezdő útmutató a kódoptimalizálásához.
- Alacsony processzorhasználat esetén a Instrumentation eszközzel azonosíthatja a hívásszámokat és az átlagos függvényidőt a falióra-idő alapján. Ez segíthet azonosítani az olyan problémákat, mint a versengés vagy a szálkészlet éhezése.
-
Allocation Rate. A kéréseket kiszolgáló webalkalmazások esetében az aránynak viszonylag egyenletesnek kell lennie. -
GC Heap Size. Ebből a számlálóból megtudhatja, hogy a memóriahasználat folyamatosan növekszik-e, és esetleg kiszivárog. Ha magasnak tűnik, használja a memóriahasználati eszközök egyikét. -
Threadpool Thread Count. A kéréseket kiszolgáló webalkalmazások esetében tekintse meg ezt a számlálót, és ellenőrizze, hogy a szálszám állandó vagy állandó ütemben emelkedik-e.
Íme egy példa a CPU Usage alacsony, míg a ThreadPool Thread Count viszonylag magas.
Az alacsony PROCESSZORhasználattal rendelkező, folyamatosan növekvő szálak száma a szálkészlet éhezésének jelzése lehet. A szálkészletnek folyamatosan új szálakat kell pörgetnie. A szálkészlet éhezése akkor fordul elő, ha a készlet nem rendelkezik olyan szállal, amely új munkaelemeket dolgozna fel, és gyakran az alkalmazások lassan válaszolnak.
Az alacsony CPU-használat és a viszonylag magas szálszám alapján, valamint a szálkészlet éhezésének lehetséges eseteinek elméletén dolgozva váltson a Instrumentation eszköz használatára.
Hívások számának és időzítési adatainak vizsgálata
Vessünk egy pillantást a Instrumentation eszköz nyomaira, hogy megtudjuk, megpróbálhatunk-e többet megtudni arról, hogy mi történik a szálakkal.
Miután begyűjtöttünk egy nyomkövetést a Instrumentation eszközzel, és betöltöttük a Visual Studióba, először ellenőrizzük a kezdeti .diagsession jelentésoldalt, amely összegzett adatokat jelenít meg. Az összegyűjtött nyomkövetésben a jelentésben a Részletek megtekintése hivatkozást használjuk, majd kiválasztjuk a Flame Graphopciót.
A Flame Graph-vizualizáció azt mutatja, hogy a QueryCustomerDB függvény (sárga színnel) felelős az alkalmazás futási idejének jelentős részéért.
Kattintson a jobb gombbal a QueryCustomerDB függvényre, és válassza a Megtekintés hívásfábanlehetőséget.
Az alkalmazás legnagyobb processzorhasználattal rendelkező kódútvonalát gyakori elérési útnak nevezzük. A gyakori elérésű útvonal láng ikonja (
) segítségével gyorsan azonosíthatók a javítható teljesítményproblémák.
A Hívásfa nézetben láthatja, hogy a forró útvonal tartalmazza a QueryCustomerDB függvényt, amely egy lehetséges teljesítményproblémára utal.
A függvény Önálló és QueryCustomerDB értékei a más függvényekben töltött időhöz képest nagyon magasak. Ellentétben Total és Avg Totalértékekkel, a Saját értékek kizárják a más függvényekben töltött időt, így ez egy jó hely a teljesítmény szűk keresztmetszetének megtalálásához.
Borravaló
Ha az saját értékek a magas helyett viszonylag alacsonyak voltak, valószínűleg szeretne megnézni a QueryCustomerDB függvény által hívott konkrét lekérdezéseket.
Kattintson duplán a QueryCustomerDB függvényre a függvény forráskódjának megjelenítéséhez.
public ActionResult<string> QueryCustomerDB()
{
Customer c = QueryCustomerFromDbAsync("Dana").Result;
return "success:taskwait";
}
Csinálunk egy kis kutatást. Másik lehetőségként időt takaríthatunk meg, és hagyhatjuk, hogy Copilot végezze el a kutatást.
Ha a Copilot-ot használjuk, válassza a Copilot megkérdezése lehetőséget a helyi menüben, és írja be a következő kérdést:
Can you identify a performance issue in the QueryCustomerDB method?
Borravaló
Perjelparancsokat használhat, például /optimalizálni, hogy jó kérdéseket tehessen fel a Copilot számára.
A Copilot azt mondja, hogy ez a kód egy aszinkron API-t hív meg várakozás nélkül. Ez a sync-over-async kódminta, amely a szálkészlet kimerülésének gyakori oka, és blokkolhatja a szálakat.
A megoldáshoz használja az await függvényt. Ebben a példában a Copilot a következő kódjavaslatot adja meg a magyarázattal együtt.
public async Task<ActionResult<string>> QueryCustomerDB()
{
Customer c = await QueryCustomerFromDbAsync("Dana");
return "success:taskwait";
}
Ha az adatbázis-lekérdezésekkel kapcsolatos teljesítményproblémák jelennek meg, az Adatbázis eszköz segítségével megvizsgálhatja, hogy bizonyos hívások lassabbak-e. Ezek az adatok a lekérdezések optimalizálásának lehetőségét jelezhetik. Az adatbázis-eszköz teljesítményproblémák vizsgálatához való használatát bemutató oktatóanyagért tekintse meg Esettanulmány: Kezdő útmutató a kódoptimalizálásához. Az Adatbázis eszköz támogatja a .NET Core-t ADO.NET vagy Entity Framework Core használatával.
Ha vizualizációkat szeretne kapni a Visual Studio-ban az egyes szálak viselkedéséről, a hibakeresés során használhatja a Párhuzamos verem ablakot. Ez az ablak az egyes szálakat, valamint információkat jelenít meg a várakozó szálakról, azokról a szálakról, amelyeken várakoznak, és a holtpontokról .
További információ a szálak éhezéséről a szálkészletben az alábbi hivatkozáson található: A szálkészlet éhezés észlelése.
Következő lépések
Az alábbi cikkek és blogbejegyzések további információkat nyújtanak a Visual Studio teljesítményeszközök hatékony használatának elsajátításához.
- Esettanulmány: Útmutató a kód optimalizálásához
- esettanulmány: Dupla teljesítmény 30 perc alatt
- A Visual Studio teljesítményének javítása az új Mérőeszköz segítségével