У меня есть веб-приложение, которое время от времени переводит IE в зависшее состояние, когда IE использует 100% ЦП. Единственный выход - прекратить процесс IE.
Когда я смотрю на трассировку стека потока, который зависает в iexplore.exe, я вижу, что стек проходит через mshtmled.dll. Я привык видеть mshtml.dll в этих следах стека, но не mshtmled.dll.
Вызываемые методы заставляют вас думать, что на странице есть редактор (например, CSelectionManager::SetEditContext
или CSelectionManager::EnsureEditContextClick
), но у меня на странице не используется редактор HTML (например, редактор FCK в YUI RTE).
Так что мне действительно интересно: как mshtmled.dll используется IE?
Пытаюсь отключить mshtmled.dll
@VonC предложил в комментариях отключить mshtmled.dll через диалоговое окно «Управление надстройками», которое вы получаете на вкладке «Программы» в настройках обозревателя. После отключения этой dll и перезапуска IE я вижу, что она отключена:
альтернативный текст http://img.skitch.com/20090226-c9e9ygek8i6a7di3jijang2x317k
Однако после этого я все еще могу воспроизвести проблему, и я действительно вижу (ах!) Mshtmled.dll используется в трассировке стека зависшего потока:
http://img.skitch.com/20090226-m3167dxb8iaax3wgy22eatruyp.png
Исправление Microsoft
У Microsoft есть исправление для mshtmled.dll, устраняющее проблему, очень похожую на ту, которую я наблюдаю. Но это исправление, скорее всего, установлено на машинах, на которых мы можем воспроизвести проблему, поскольку у нас есть SP3. Мне кажется, что проблема, с которой я столкнулся, аналогична той, что была исправлена. Я просто упоминаю об этом здесь на тот случай, если кто-то сочтет это полезным.