Çok baytlı karakter dizileri oluşturma neden inanılmaz derecede yavaş?


11

Yaklaşık bir hafta önce, uzun Japonca dosya adına sahip bir dosya görünür olduğunda µTorrent dosya listesinin bir saniyeden daha kısa bir süre boyunca askıda kalacağını fark ettim. Merak ettim, ama o zaman endişelenecek zamanım yoktu, özellikle de sadece µTorrent ile sınırlıydı.

Ancak bugün bunun olmadığını fark ettim. Örneğin, uzun çok baytlı karakter dosyası adı olan bir metin dosyasını kaydedip Not Defteri'nde açarsam, bazı garip sonuçlar elde ederim. Pencereyi yeniden boyutlandırmaya çalıştığımda, her şey bir taramayı yavaşlatır. Bununla birlikte, penceremdeki tutuşumu serbest bırakabilir ve imlecimin nasıl ikiye ayrıldığını görebilirim , biri benim tarafımdan kontrol ediliyor, diğeri ise orijinal olarak yaptığım sürükleme hareketini gerçekleştiren daha iyi bir kelime olmaması için bir çeşit "hayalet imleç". fare. Bu yalnızca bu türdeki dosya adları için geçerlidir ve Notepad ve µTorrent dışındaki uygulamalarda da test ettim.

Bu garip davranışa neyin neden olduğuna dair ipuçları aramaya çalıştım, ama hiçbir şey bulamıyorum. Burada neler olup bittiğine dair bir fikri olan var mı?

Ne yazık ki, bunun ekran görüntüsünü alamıyorum çünkü tüm ekran görüntüsü uygulamaları, çekim yapmadan önce yeniden boyutlandırma tamamlanana kadar askıda kalıyor ...

Düzenleme: Sorunu gösteren bir video kaydettim. Bunun nedeni belirlemeye yardımcı olup olmayacağından emin değilim ama en azından yukarıdaki açıklamamdan daha iyi olmalı:

https://vimeo.com/58619918

Düzenleme 2: İşte istendiği gibi örnek bir dosya: Bunun uzun çok baytlı dosya adına sahip boş bir dosya olduğuna dikkat edin: http://goo.gl/bgnGP (Ve dosya adını işleyemeyen bir tarayıcıya sahip olanlar için, işte burada bir zip dosyası: https://dl.dropbox.com/u/55495248/multibyte.zip )


İlk başta YouTube'a yükleyecektim, ancak görünüşe göre gerçek adınızı göstermek için hesabınızı "yükseltmeden" imkansız. Hayır teşekkürler. Umarım Vimeo iyidir.
Merigrim

Bize bilgisayar hakkında biraz bilgi verebilir misiniz? Özel olarak, kullandığınız ekran kartı (ya da bu videoboard çip içinde mi? Video sürücüleri güncelleniyor mu? Görüntü sorunları Windows değil videodan kaynaklanabilir ....
woliveirajr

1
@woliveirajr Elbette. İşte elimden bir DxDiag.txt (CPU, GPU, bellek vb. Hakkında bilgi içerir): pastebin.com/eYvS8mGL Video sürücülerimi güncellediğimden beri bir iki ay geçti, sanırım bir deneyeceğim.
Merigrim

2
Superuser.com/questions/371282/… soruya ilk yanıtı deneyin ve yardımcı olup olmadığına bakın ...
woliveirajr

1
ve ayrıca (yukarıdaki aynı bağlantıda) support.microsoft.com/kb/2505438
woliveirajr ile

Yanıtlar:


1

Unicode'un nasıl ele alındığını açıklayabilirim, ancak sorunuzu gerçekten doğrudan cevaplayamıyorum. İlk yazma için yavaşladım, ama bir kez yapıldıktan sonra tekrar hızlılaşıyor ...

Unicode uçak dediğimiz şeyden oluşur. Düzlemler 256 karakterdir. Çoğu durumda, yazı tipleri kısmen çok büyük dosyalardan kaçınmak için bir düzlemi idare eder, ancak aynı zamanda birçok dil için yeterli olduğu için (İngilizce, Fransızca, Almanca ...). Ancak, Asya dilleri birden çok düzlemi kapsayan daha büyük yazı tiplerini kullanır. Tam bir Japon karakter seti için, eğer doğruysam, yaklaşık 10 uçak alırsınız. Çince daha fazladır (özellikle geleneksel Çince!)

Bu yazı tipleriyle oluştururken, ilgili yazı tipini seçmeniz gerekir (bir yazı tipi tüm karakterleri işlemek için yeterli değilse, işletim sistemi sizin için yazı tipleri arasında geçiş yapar; bu başlık altındadır, ancak gerçekleşir.) Bu zaman alıcıdır. Ayrıca, sistem bu yazı tipine ilk kez yazdığında, onu diskten yüklemesi gerekir. Büyük yazı tiplerine sahip Asya dilleri de zaman alır.

Son olarak, karşılaştığınız şey muhtemelen daha olasıdır, karakterler (veya glifler) genellikle daha karmaşıktır. Bu, karakterleri oluşturmak için daha fazla zaman anlamına gelir. Bu yazı tipi için OpenGL / D3D ile video kartı tarafından yapılabilir, ancak bu çok iyi değil. Çok fazla kalite kaybedersiniz (MS-Windows altında yazı tipi kalitesine rağmen ...) Bu yüzden çoğunlukla işlemci tarafından yapılır.

Son bir not, bunun gerçekten bir endişe olmasına rağmen, varsayılan olarak Win7, pencere kenarlarını yarı şeffaf hale getiriyor. Soruna katkıda bulunan olabilir. Ancak, oluşturmanın bu kısmı kesinlikle video kartınızdaki hızlandırılmış 2D / 3D işlevleriyle yapılır.


-1

Bilgisayarınız çok baytlı bir karakter oluşturuyorsa, karakteri işlemek için belki 1'den fazla talimat vermek zorunda olduğu için yavaşlar.

64 bit sürümü 1 çağrıda 64 bit adını alabilir, 1 çağrıda işleyebilir ve 1 çağrı = 3 çağrıda saklayabilir.

32 bitlik bir sürümün ilk 32 bit, sonra diğer 32 bit ile çalışması ve her iki işlemi de yönetmesi gerekir:

3 çağrıda 64 bit adını alın, 3 çağrıda işleme koyun ve 3 çağrı = 9 çağrıda saklayın.


Karakter getirme ve depolama, yapılan işlemin sadece küçük bir kısmıdır.
vonbrand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.