Чому відображення багатобайтових послідовностей символів неймовірно повільне?


11

Близько тижня тому я зрозумів, що список файлів у µTorrent зависне менше секунди щоразу, коли буде видно файл із довгим іменем японського файлу. Мені це здалося цікавим, але я в той час не мав часу хвилюватися про це, тим більше, що він був обмежений лише µTorrent.

Однак сьогодні я зрозумів, що це не так. Якщо я, наприклад, збережу текстовий файл з довгим багатобайтовим іменем файлу символів і відкрию його в Блокноті, я отримую деякі дивні результати. Коли я намагаюся змінити розмір вікна, все сповільнюється до повзання. Однак я можу відпустити своє захоплення вікном і побачити, як мій курсор розбивається на два , один керується мною, а другий є своєрідним «привидним курсором» через відсутність кращого слова, яке виконує перетягуючий рух, який я спочатку робив за допомогою миша. Це стосується лише найменувань такого роду, і я тестував це в інших програмах, крім Notepad та µTorrent.

Я намагався шукати підказки щодо того, що викликає цю дивну поведінку, але нічого не можу знайти. Хтось тут має уявлення про те, що відбувається?

На жаль, я не можу зробити знімок екрана, оскільки, здається, всі програми знімків екрана зависають до завершення зміни розміру, перш ніж зробити знімок ...

Редагувати: я записав відео, яке демонструє проблему. Я не впевнений, чи допоможе це визначити причину, але воно повинно бути принаймні краще, ніж моє пояснення вище:

https://vimeo.com/58619918

Редагувати 2: Ось зразок файлу за запитом: Зауважте, що це просто порожній файл з довгим багатобайтовим ім'ям файлу: http://goo.gl/bgnGP (А для тих, хто має браузер, який не може обробити ім'я файлу, ось ось zip-файл: https://dl.dropbox.com/u/55495248/multibyte.zip )


Спочатку я збирався завантажити його на YouTube, але, мабуть, неможливо без "оновлення" вашого акаунта показати своє справжнє ім'я. Ні, дякую. Я сподіваюся, що Вімео все в порядку.
Merigrim

Не могли б ви розповісти нам детальну інформацію про комп'ютер? Спеціально, використовувана відеокарта (чи це ті відеокарти всередині мікросхеми? Чи оновлені драйвери відео? Проблеми з
наданням

1
@woliveirajr Звичайно. Ось знятий DxDiag.txt (містить інформацію про процесор, графічний процесор, пам'ять тощо): pastebin.com/eYvS8mGL Я думаю, що минуло місяць чи два, як я оновив свої драйвери відео, я піду.
Merigrim

2
Спробуйте першу відповідь на питання superuser.com/questions/371282/… і подивіться, чи це допомагає ...
woliveirajr

1
а також (у тому ж посиланні вище) примітка про support.microsoft.com/kb/2505438
woliveirajr

Відповіді:


1

Я можу пояснити, як обробляється Unicode, але я не можу реально безпосередньо відповісти на ваше запитання. У мене була повільність для першого запису, але як тільки це буде зроблено, воно стає швидко швидко ...

Unicode складається з того, що ми називаємо площинами. Площини - 256 символів. У багатьох ситуаціях шрифти оброблятимуть одну площину, частково, щоб уникнути дуже великих файлів, але також тому, що цього достатньо для багатьох мов (англійська, французька, німецька ...). Однак азіатські мови використовують більші шрифти, які охоплюють кілька площин. Для повного набору символів японців ви отримаєте, якщо я правда, близько 10 літаків. Китайців більше (особливо традиційних китайців!)

Під час візуалізації з такими шрифтами ви повинні вибрати відповідний шрифт (якщо одного шрифту недостатньо для обробки всіх символів, операційна система перемикає між вами шрифти; це під кришкою, але це трапляється.) Це забирає багато часу. Плюс до цього, коли система записує цим шрифтом, потрібно завантажити її з диска. Азіатські мови, що мають великі шрифти, теж вимагають часу.

Нарешті, і це, мабуть, більш вірогідно, з чим ви стикаєтесь, символи (або гліфи), як правило, складніші. Це означає більше часу для відображення символів. Хоча це може бути зроблено відеоплатою з OpenGL / D3D, для шрифтів це не так добре. Ви втрачаєте багато якості (хоча якість шрифту в MS-Windows ...) Так це найчастіше робиться процесором.

Останнє зауваження, хоча я б справді сумнівався в тому, що викликає занепокоєння, за замовчуванням Win7 робить краї вікон напівпрозорими. Це може призвести до проблеми. Однак ця частина візуалізації, безумовно, виконується за допомогою прискорених 2D / 3D-функцій на вашій дошці відео.


-1

Якщо ваш ПК виводить багатобайтовий символ, він проходить повільніше, тому що, можливо, йому потрібно виконати більше 1 інструкції для обробки символу.

Версія 64 біт може отримати ім'я 64 біт за 1 виклик, обробити його в 1 виклик і зберегти його в 1 виклик = 3 виклики.

32-бітній версії доведеться працювати з першими 32 бітами, потім з іншими 32, а потім керувати обома операціями:

отримайте ім'я 64 біт у 3 виклику, обробляйте його в 3 виклику та зберігайте його в 3 виклику = 9 викликах.


Вибір та зберігання символів - це лише невелика частина оброблюваної обробки.
vonbrand
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.