マルチバイト文字シーケンスのレンダリングが信じられないほど遅いのはなぜですか?


11

約1週間前、長い日本語のファイル名のファイルが表示されるたびに、µTorrentのファイルリストが1秒未満ハングすることに気付きました。気になりましたが、特にμTorrentのみに限定されていたため、当時は心配する時間がありませんでした。

しかし、今日はそうではないことに気付きました。たとえば、テキストファイルを長いマルチバイト文字のファイル名で保存してメモ帳で開くと、奇妙な結果が得られます。ウィンドウのサイズを変更しようとすると、すべてがクロールに遅くなります。しかし、ウィンドウのグリップを離すと、カーソルが2つ分割される様子を見ることができます。1つは私によって制御され、もう1つは、元々マウス。これは、この性質のファイル名にのみ適用され、メモ帳やµTorrent以外のアプリケーションでもテストしました。

この奇妙な振る舞いの原因についての手がかりを探してみましたが、何も見つかりません。ここで誰かが何が起こっているのか考えていますか?

残念ながら、ショットを撮る前にサイズ変更が完了するまですべてのスクリーンショットアプリケーションがハングするようですので、このスクリーンショットを撮ることはできません...

編集:問題を示すビデオを録画しました。これが原因の特定に役立つかどうかはわかりませんが、少なくとも上記の説明よりも優れているはずです。

https://vimeo.com/58619918

編集2:注意は、それが単に長いマルチバイトのファイル名を持つ空のファイルだということ:ここでは要求されたように、サンプルファイルですhttp://goo.gl/bgnGP(とファイル名を処理できないブラウザであなたのそれらのために、ここでのzipファイル:https : //dl.dropbox.com/u/55495248/multibyte.zip


最初はYouTubeにアップロードするつもりでしたが、アカウントを「アップグレード」せずに本名を表示することは不可能なようです。結構です。Vimeoが大丈夫であることを願っています。
メリグリム

コンピューターに関する詳細を教えてください。特に、使用するビデオカード(またはチップ内のビデオボードですか?ビデオドライバーは更新されていますか?レンダリングの問題は、Windowsではなくビデオによって引き起こされる可能性があります
。...– woliveirajr

1
@woliveirajrもちろん。ここ剥奪のDxDiag.txt(などCPU、GPU、メモリ、に関する情報が含まれています)です:pastebin.com/eYvS8mGL私は私のビデオドライバを更新してから、私はそれが1,2ヶ月となっていると思う、私はそれをやってみますよ。
メリグリム

2
質問superuser.com/questions/371282/への最初の回答を試して、それが役立つかどうかを確認してください
...-woliveirajr

1
また、(上記の同じリンクで)support.microsoft.com/kb/2505438
woliveirajr

回答:


1

Unicodeがどのように処理されているかを説明することはできますが、実際にあなたの質問に直接答えることはできません。私は最初の書き込みに時間がかかりましたが、それが完了すると再び高速になります...

Unicodeは、プレーンと呼ばれるもので構成されています。プレーンは256文字です。多くの状況で、フォントは1つのプレーンを処理します。これは、非常に大きなファイルを回避するためだけでなく、多くの言語(英語、フランス語、ドイツ語など)で十分なためです。ただし、アジアの言語は、複数のプレーンをカバーする大きなフォントを使用します。完全な日本語の文字セットの場合、私が正しいとすれば、約10面になります。中国語は特に(特に繁体字中国語です!)

そのようなフォントでレンダリングする場合、対応するフォントを選択する必要があります(1つのフォントですべての文字を処理するのに十分でない場合、オペレーティングシステムはフォントを切り替えます。さらに、システムが最初にそのフォントを書き込むとき、ディスクからロードする必要があります。大きなフォントを持つアジア言語には時間がかかります。

最後に、おそらくあなたが遭遇している可能性が高いのですが、文字(またはグリフ)は一般的に複雑です。つまり、キャラクターをレンダリングする時間が長くなります。これはOpenGL / D3Dを備えたビデオボードで行うことができますが、フォントについてはあまり良くありません。多くの品質が失われます(MS-Windowsでのフォントの品質は...)。そのため、ほとんどの場合、プロセッサによって行われます。

最後にもう1つ注意しなければならないことはありますが、これは懸念事項ではありませんが、デフォルトではWin7はウィンドウの端を半透明にします。それが問題を追加する可能性があります。ただし、レンダリングのこの部分は、ビデオボード上の高速化された2D / 3D機能で最も確実に行われます。


-1

お使いのPCがマルチバイト文字をレンダリングする場合、文字を処理するために複数の命令を実行する必要があるため、遅くなります。

64ビットバージョンでは、1回の呼び出しで64ビットの名前を取得し、1回の呼び出しで処理して、1回の呼び出し= 3回の呼び出しで保存できます。

32ビットバージョンは、最初の32ビット、次に他の32ビットで動作し、両方の操作を管理する必要があります。

3コールで64ビットの名前を取得し、3コールで処理し、3コール= 9コールに保存します。


文字のフェッチと保存は、実行される処理のほんの一部です。
フォンブランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.