เหตุใดการเรนเดอร์อักขระหลายไบต์จึงช้าอย่างไม่น่าเชื่อ


11

ประมาณหนึ่งสัปดาห์ที่ผ่านมาฉันรู้ว่ารายการไฟล์ใน µTorrent จะวางสายน้อยกว่าหนึ่งวินาทีเมื่อไฟล์ที่มีชื่อไฟล์ภาษาญี่ปุ่นยาวปรากฏขึ้น ฉันพบว่ามันอยากรู้อยากเห็น แต่ฉันไม่มีเวลาที่จะต้องกังวลเกี่ยวกับเรื่องนี้ในเวลาโดยเฉพาะอย่างยิ่งเนื่องจากมัน จำกัด อยู่เพียง µTorrent

อย่างไรก็ตามวันนี้ฉันรู้ว่ามันไม่ได้เป็น ถ้าฉันบันทึกไฟล์ข้อความด้วยชื่อไฟล์อักขระหลายไบต์แบบยาวและเปิดใน Notepad ฉันจะได้ผลลัพธ์ที่แปลก เมื่อฉันพยายามปรับขนาดหน้าต่างทุกอย่างช้าลงเพื่อรวบรวมข้อมูล อย่างไรก็ตามฉันสามารถปล่อยกริปของฉันบนหน้าต่างและดูว่าเคอร์เซอร์ของฉันแยกเป็นสองส่วนหนึ่งถูกควบคุมโดยฉันและอื่น ๆ ที่เป็น "เคอร์เซอร์ผี" เพราะไม่มีคำที่ดีกว่าที่ดำเนินการเคลื่อนไหวลากฉันทำกับ เม้าส์ สิ่งนี้ใช้ได้กับชื่อไฟล์ในลักษณะนี้เท่านั้นและฉันได้ทดสอบในแอปพลิเคชั่นอื่นที่ไม่ใช่ Notepad และ NotepadTorrent ด้วย

ฉันพยายามค้นหาเบาะแสว่ามีอะไรทำให้เกิดพฤติกรรมแปลก ๆ นี้ แต่ฉันไม่พบอะไรเลย ใครบ้างที่นี่มีความคิดใด ๆ เกิดขึ้น?

น่าเสียดายที่ฉันไม่สามารถจับภาพหน้าจอของสิ่งนี้ได้เนื่องจากดูเหมือนว่าทุกแอปพลิเคชั่นจับภาพหน้าจอค้างไว้จนกว่าการปรับขนาดจะเสร็จสมบูรณ์ก่อนที่จะถ่ายภาพ ...

แก้ไข:ฉันบันทึกวิดีโอที่แสดงให้เห็นถึงปัญหา ฉันไม่แน่ใจว่าสิ่งนี้จะช่วยในการระบุสาเหตุ แต่อย่างน้อยควรจะดีกว่าคำอธิบายของฉันด้านบน:

https://vimeo.com/58619918

แก้ไข 2:นี่คือตัวอย่างไฟล์ตามที่ร้องขอ: โปรดทราบว่ามันเป็นเพียงไฟล์เปล่าที่มีชื่อไฟล์หลายไบต์ยาว: http://goo.gl/bgnGP (และสำหรับเบราว์เซอร์ที่ไม่สามารถจัดการชื่อไฟล์ของคุณได้นี่คือ ไฟล์ซิป: https://dl.dropbox.com/u/55495248/multibyte.zip )


ตอนแรกฉันจะอัปโหลดไปยัง YouTube แต่ดูเหมือนจะเป็นไปไม่ได้หากไม่มี "อัปเกรด" บัญชีของคุณเพื่อแสดงชื่อจริงของคุณ ไม่เป็นไรขอบคุณ. ฉันหวังว่า Vimeo ไม่เป็นไร
Merigrim

คุณช่วยเล่ารายละเอียดเกี่ยวกับคอมพิวเตอร์ให้เราฟังได้ไหม โดยเฉพาะการ์ดแสดงผลที่คุณใช้ (หรือเป็น videoboard ภายในชิปหรือไม่มีการอัปเดตไดรเวอร์วิดีโอหรือไม่ปัญหาการแสดงผลอาจเกิดจากวิดีโอไม่ใช่ Windows ....
woliveirajr

1
@woliveirajr แน่นอน นี่คือ DxDiag.txt ที่ถูกปล้น (มีข้อมูลเกี่ยวกับ CPU, GPU, หน่วยความจำและอื่น ๆ ): 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 ... ) ดังนั้นโปรเซสเซอร์จึงทำบ่อยที่สุด

One note ล่าสุดแม้ว่าฉันจะสงสัยจริง ๆ ว่าเป็นปัญหา แต่โดยค่าเริ่มต้น Win7 จะทำให้หน้าต่างเป็นแบบกึ่งโปร่งใส อาจเป็นไปได้ว่าจะเพิ่มปัญหา อย่างไรก็ตามส่วนนี้ของการเรนเดอร์นั้นแน่นอนที่สุดแล้วด้วยฟังก์ชั่นเร่งความเร็ว 2D / 3D บนบอร์ดวิดีโอของคุณ


-1

หากพีซีของคุณแสดงอักขระหลายไบต์มันจะช้าลงเพราะอาจต้องทำมากกว่า 1 ขั้นตอนเพื่อประมวลผลอักขระ

รุ่น 64 บิตสามารถรับชื่อ 64 บิตในการโทร 1 ดำเนินการได้ 1 การโทรและเก็บไว้ใน 1 การโทร = 3 การโทร

รุ่น 32 บิตจะต้องทำงานกับ 32 บิตแรกจากนั้นอีก 32 บิตและจากนั้นจัดการการดำเนินการทั้งสอง:

รับชื่อ 64 บิตในการโทร 3 ดำเนินการใน 3 การโทรและเก็บไว้ใน 3 การโทร = 9 การโทร


การดึงและจัดเก็บอักขระเป็นเพียงส่วนน้อยของการประมวลผล
vonbrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.