Mengapa rendering urutan karakter multibyte sangat lambat?

11

Sekitar seminggu yang lalu saya menyadari bahwa daftar file dalam μTorrent akan hang kurang dari satu detik setiap kali file dengan nama file Jepang yang panjang terlihat. Saya merasa penasaran, tetapi saya tidak punya waktu untuk mengkhawatirkannya pada saat itu, terutama karena itu hanya terbatas pada μTorrent.

Namun, hari ini saya menyadari bahwa itu tidak benar. Jika saya misalnya menyimpan file teks dengan nama file karakter multibyte panjang dan membukanya di Notepad, saya mendapatkan beberapa hasil aneh. Ketika saya mencoba untuk mengubah ukuran jendela, semuanya melambat menjadi merangkak. Namun saya dapat melepaskan cengkeraman saya di jendela dan melihat bagaimana kursor saya terbelah dua , satu dikontrol oleh saya dan yang lainnya menjadi semacam "kursor hantu" karena tidak ada kata yang lebih baik yang mengeksekusi gerakan seret yang awalnya saya buat dengan mouse. Ini hanya berlaku untuk nama file seperti ini, dan saya telah mengujinya dalam aplikasi selain Notepad dan μTorrent juga.

Saya sudah mencoba mencari petunjuk tentang apa yang menyebabkan perilaku aneh ini, tetapi saya tidak dapat menemukan apa pun. Adakah yang tahu apa yang terjadi di sini?

Sayangnya, saya tidak dapat mengambil tangkapan layar ini karena sepertinya semua aplikasi tangkapan layar digantung sampai pengubahan ukuran selesai sebelum mengambil bidikan ...

Sunting: Saya merekam video yang menunjukkan masalah. Saya tidak yakin apakah ini akan membantu dalam mengidentifikasi penyebabnya tetapi setidaknya harus lebih baik daripada penjelasan saya di atas:

https://vimeo.com/58619918

Sunting 2: Berikut ini contoh file seperti yang diminta: Perhatikan bahwa ini hanyalah file kosong dengan nama file multibyte panjang: http://goo.gl/bgnGP (Dan bagi Anda yang menggunakan browser yang tidak dapat menangani nama file, inilah file zip: https://dl.dropbox.com/u/55495248/multibyte.zip )

Merigrim
sumber
Saya akan mengunggahnya ke YouTube pada awalnya, tetapi tampaknya tidak mungkin tanpa "memutakhirkan" akun Anda untuk menunjukkan nama asli Anda. Tidak, terima kasih. Saya harap Vimeo baik-baik saja.
Merigrim
Bisakah Anda memberi tahu kami beberapa detail tentang komputer? Khususnya, kartu video yang Anda gunakan (atau apakah itu videoboard di dalam chip? Apakah driver video diperbarui? Masalah rendering dapat disebabkan oleh video, bukan Windows ....
woliveirajr
1
@woliveirajr Tentu. Berikut adalah DxDiag.txt yang dilucuti (berisi info tentang CPU, GPU, memori, dll.): Pastebin.com/eYvS8mGL Saya pikir sudah satu atau dua bulan sejak saya memperbarui driver video saya, saya akan mencobanya.
Merigrim
2
Coba jawaban pertama untuk pertanyaan superuser.com/questions/371282/… dan lihat apakah itu membantu ...
woliveirajr
1
dan juga (dalam tautan yang sama di atas) catatan tentang support.microsoft.com/kb/2505438
woliveirajr

Jawaban:

1

Saya dapat menjelaskan bagaimana Unicode ditangani, tetapi saya tidak dapat menjawab pertanyaan Anda secara langsung. Saya memiliki kelambatan untuk menulis pertama, tetapi setelah selesai, akan cepat lagi ...

Unicode terdiri dari apa yang kita sebut pesawat. Pesawat adalah 256 karakter. Dalam banyak situasi, font akan menangani satu bidang, sebagian untuk menghindari file yang sangat besar tetapi juga karena itu cukup untuk banyak bahasa (Inggris, Prancis, Jerman ...). Namun, bahasa Asia menggunakan font yang lebih besar yang mencakup banyak bidang. Untuk set karakter Jepang lengkap Anda akan mendapatkan, jika saya benar, sekitar 10 pesawat. Cina lebih (terutama Cina tradisional!)

Saat rendering dengan font seperti itu, Anda harus memilih font yang sesuai (jika satu font tidak cukup untuk menangani semua karakter, sistem operasi beralih antara font untuk Anda; itu di bawah tenda, tetapi itu terjadi.) Itu memakan waktu. Plus, pertama kali sistem menulis dalam font itu, perlu memuatnya dari disk. Bahasa Asia memiliki font besar, itu juga butuh waktu.

Akhirnya, dan itu mungkin lebih mungkin apa yang Anda temui, karakter (atau mesin terbang) umumnya lebih kompleks. Itu berarti lebih banyak waktu untuk membuat karakter. Meskipun itu bisa dilakukan oleh papan video dengan OpenGL / D3D, untuk font, itu tidak begitu baik. Anda kehilangan banyak kualitas (meskipun kualitas font di bawah MS-Windows ...) Jadi itu paling sering dilakukan oleh prosesor.

Satu catatan terakhir, meskipun saya benar-benar akan meragukan hal itu menjadi perhatian, secara default Win7 membuat tepi jendela semi-transparan. Bisa jadi itu menambah masalah. Namun, bagian rendering ini tentunya dilakukan dengan fungsi 2D / 3D yang dipercepat di papan video Anda.

Alexis Wilke
sumber
-1

Jika pc Anda membuat karakter multibyte berjalan lebih lambat karena mungkin harus melakukan lebih dari 1 instruksi untuk memproses karakter.

Versi 64bits bisa mendapatkan nama 64 bit dalam 1 panggilan, memprosesnya dalam 1 panggilan dan menyimpannya dalam 1 panggilan = 3 panggilan.

Versi 32bits harus bekerja dengan 32 bit pertama, lalu 32 bit lainnya, dan kemudian mengelola kedua operasi:

dapatkan nama 64 bit dalam 3 panggilan, proses dalam 3 panggilan dan simpan dalam 3 panggilan = 9 panggilan.

AskPGSV
sumber
Karakter mengambil dan menyimpan hanya sebagian kecil dari pemrosesan yang dilakukan.
vonbrand