contextSwitchDeadlock MDA
Feljegyzés
Ez a cikk a .NET-keretrendszer vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.
A contextSwitchDeadlock
felügyelt hibakeresési segéd (MDA) akkor aktiválódik, ha holtpontot észlel egy COM-környezetváltási kísérlet során.
Hibajelenségek
A leggyakoribb tünet az, hogy egy nem felügyelt COM-összetevő hívása a felügyelt kódból nem tér vissza. Egy másik tünet a memóriahasználat időbeli növekedése.
Ok
A legvalószínűbb ok az, hogy az egyszálas lakás (STA) szál nem pumpálja az üzeneteket. A STA-szál vagy üzenetek szivattyúzása nélkül várakozik, vagy hosszadalmas műveleteket hajt végre, és nem teszi lehetővé az üzenetsor szivattyúzását.
A memóriahasználat időbeli növekedését az okozza, hogy a véglegesítő szál nem felügyelt COM-összetevőt próbál meghívni Release
, és az összetevő nem tér vissza. Ez megakadályozza, hogy a véglegesítő visszanyerje a többi objektumot.
Alapértelmezés szerint a Visual Basic konzolalkalmazások főszálának szálmodellje az STA. Ez az MDA akkor aktiválódik, ha egy STA-szál közvetlenül vagy közvetetten, a közös nyelvi futtatókörnyezeten vagy egy külső vezérlőn keresztül com-interoperabilitást használ. Ha el szeretné kerülni az MDA aktiválását egy Visual Basic konzolalkalmazásban, alkalmazza az MTAThreadAttribute attribútumot a fő metódusra, vagy módosítsa az alkalmazást az üzenetek szivattyúzására.
A következő feltételek teljesülése esetén lehetséges, hogy az MDA hamisan aktiválódik:
Az alkalmazások közvetlenül vagy közvetetten, kódtárakon keresztül hoznak létre COM-összetevőket STA-szálakból.
Az alkalmazás leállt a hibakeresőben, és a felhasználó vagy folytatta az alkalmazást, vagy végrehajtott egy lépéses műveletet.
A nem felügyelt hibakeresés nincs engedélyezve.
Annak megállapításához, hogy az MDA hamisan van-e aktiválva, tiltsa le az összes töréspontot, indítsa újra az alkalmazást, és hagyja, hogy leállás nélkül fusson. Ha az MDA nincs aktiválva, akkor valószínű, hogy a kezdeti aktiválás hamis volt. Ebben az esetben tiltsa le az MDA-t a hibakeresési munkamenettel való interferencia elkerülése érdekében.
Feljegyzés
Ez az MDA a Visual Studio alapértelmezett készletében van. Az MDA-k letiltásáról további információt a Felügyelt hibakeresési asszisztensek hibáinak diagnosztizálása című témakörben talál.
Resolution (Osztás)
Kövesse a COM-szabályokat az STA-üzenetek pumpálásával kapcsolatban.
Effektus a futtatókörnyezetre
Ez az MDA nincs hatással a CLR-re. Csak a COM-környezetekkel kapcsolatos adatokat jelenti.
Hozam
Az aktuális környezetet és a célkörnyezetet leíró üzenet.
Konfiguráció
<mdaConfig>
<assistants>
<contextSwitchDeadlock />
</assistants>
</mdaConfig>