RichTextBox


Windows 8.1 Update 1 x64で発生します。

Windows フォームに rtb(RichTextBox) と次のコードを追加します。


XmlDocument xmldocument = new XmlDocument();
using(FileStream filestream = new FileStream("filename.xml", FileMode.Open, FileAccess.Read, FileShare.None, 4096, false))
{
	using (StreamReader stream = new StreamReader(filestream, Encoding.UTF8))
	{
		XmlReader reader = XmlReader.Create(stream);
		xmldocument.Load(reader);
	}
}
rtb.Text = xmldocument.DocumentElement.OuterXml;

実行すると、RichTextBox のスクロールが異常に遅くなる、または「型 ‘System.AccessViolationException’ のハンドルされていない例外が System.Windows.Forms.dll で発生しました

追加情報:保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。

Just-In-Time (JIT) デバッグを呼び出すための詳細については、
ダイアログ ボックスではなく、このメッセージの最後を参照してください。

************** 例外テキスト **************
System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
場所 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
場所 System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.RichTextBox.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** 読み込まれたアセンブリ **************
mscorlib
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.8000 (FX35W81RTMGDR.050727-8000)
コードベース: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
—————————————-
mscorlib.resources
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.8000 (FX35W81RTMGDR.050727-8000)
コードベース: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
—————————————-
WindowsFormsApplication2
アセンブリ バージョン: 1.0.0.0
Win32 バージョン: 1.0.0.0
コードベース: file:///app.exe
—————————————-
System.Windows.Forms
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
—————————————-
System
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
—————————————-
System.Drawing
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
—————————————-
System.Configuration
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
—————————————-
System.Xml
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
—————————————-
Accessibility
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
—————————————-
System.Windows.Forms.resources
アセンブリ バージョン: 2.0.0.0
Win32 バージョン: 2.0.50727.7905 (win9rel.050727-7900)
コードベース: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ja_b77a5c561934e089/System.Windows.Forms.resources.dll
—————————————-

************** JIT デバッグ **************
Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、
またはコンピュータ (machine.config) の構成ファイルの jitDebugging
値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを有効にしてコンパイルされなければ
なりません。

例:

JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、
ハンドルされていない例外はすべてコンピュータに登録された
JIT デバッガに設定されなければなりません。

」が表示されてデバックが中止されます。filename.xml は 1MB ほどですが、メモリの使用量が 100MB以上になります。また50MB以上のテキストを表示された場合も同様のエラーが発生します。

System.Windows.Forms.dll のバージョンはそれぞれ 4.0.30319.33440, 2.0.50727.7905 です。


HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger の System32 を SysWOW64 に書き換えて “C:\WINDOWS\SysWOW64\vsjitdebugger.exe” PID %d APPDOM %d EXTEXT “%s” EVTHDL %d と変更したところ、Visual Studio のデバッガーで「CLR は、COM コンテキスト 0x1b0e24e8 から COM コンテキスト 0x1b0e2738 へ 60 秒で移行できませんでした。ターゲット コンテキストおよびアパートメントを所有するスレッドが、ポンプしない待機を行っているか、Windows のメッセージを表示しないで非常に長い実行操作を処理しているかのどちらかです。この状態は通常、パフォーマンスを低下させたり、アプリケーションが応答していない状態および増え続けるメモリ使用を導く可能性があります。この問題を回避するには、すべての Single Thread Apartment (STA) のスレッドが、CoWaitForMultipleHandles のようなポンプする待機プリミティブを使用するか、長い実行操作中に定期的にメッセージをポンプしなければなりません。」この警告が発生するようになりました。

KB2977218 (Silverlight 5) を(再)インストールしたところ、このメッセージは表示されなくなりました。


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners のキーを RegistryKey.OpenSubKey() で開くと 4.0.30139 では null が返されます。2.0.50527 では正しく読み取れます。


ダイアログベースのMFCアプリケーションのダイアログに Rich Edit 2.0 Control を配置して Visual Studio IDE でデバッグを行うと、「Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {291} normal block at 0x027C24E8, 32 bytes long.
Data: 01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(181) : {290} normal block at 0x027C2498, 20 bytes long.
Data: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
」が発生して終了します。InitInstance() の CWinAppEx::InitInstance(); の後に AfxInitRichEdit(); を追加するとエラーが発生しなくなります。


RichTextBox に UTF-8 でエンコードされた特定の文字列、「𠀀」といったUnicode 追加漢字面の文字を追加するとこの現象が発生します。

投稿日: 2014年6月29日 カテゴリー: Windows settings タグ: , , , , | パーマリンク コメントする.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。