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


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>

Lásd még