我有一个奇怪的错误:
托管调试助手'ContextSwitchDeadlock'在'C:\ Documents and Settings \ Lena G \ My Documents \ SchoolStuff \ IR Information \ Home Work \ FianlProject \ finalProject \ finalProject \ bin \ Debug \ finalProject.vshost中检测到问题。可执行程序'。 附加信息:CLR无法从COM上下文0x3407968转换到COM上下文0x3407ad8 60秒。拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积。为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息。
在这个错误中,我可以继续运行或休息,如果我继续,那么它运行正常,但仍然让我担心。 我有一个程序,我读取了一个包含一些文本的xml文件,将这些单词放在哈希表中,然后从哈希写入一个规范文本文件。
如果有人可以帮我解决这个问题,请说明。
提前致谢,
海伦
答案 0 :(得分:1)
唷!托管调试助手很棒,但他们确实提供了详细的异常消息。在这种情况下,Visual Studio会警告您应用程序中正在进行COM调用的线程不能正常播放并正确响应Windows消息。
你可以继续跑步,一切都很好 - 但是首先要调查导致问题的原因是有道理的。
您的代码究竟做了什么?它如何读取XML文件?文件有多大?
如果它只是坐在解析XMLDocument的循环中,那么我会惊讶地看到这个错误。您可能(不寒而栗)想要检查您的Windows事件日志,看看您的硬盘上是否有任何坏扇区......
另一方面,如果您正在使用后台线程,那么可能是资源匮乏存在问题,或者存在阻塞调用,这些阻塞调用位于某个不经常产生足够频率的地方。