Tags:
Node Thumbnail

Dianne Hackborn วิศวกรของทีม Android ออกมาอธิบายหลักการและแก้ความเข้าใจผิดเกี่ยวกับการประมวลผลกราฟิกของ Android หลายประการ

ประเด็นเรื่อง hardware acceleration ใน Android แต่ละรุ่น

  • Android มี hardware acceleration มาตั้งแต่รุ่น 1.0 โดยส่วนที่ใช้งานคือการเรนเดอร์ตัวกรอบหน้าต่าง (window compositing) ดังนั้นแอนิเมชันต่างๆ ที่เราเห็นในเมนูหรือชิ้นส่วน UI ต่างๆ เรนเดอร์ด้วยฮาร์ดแวร์ทั้งนั้น
  • แต่เนื้อในของหน้าต่างหรือ content ภายในแอพ จะใช้ซอฟต์แวร์ประมวลผลแทน ซึ่งประสิทธิภาพของการประมวลผลจะขึ้นกับพลังของฮาร์ดแวร์และจำนวนพิกเซลที่ใช้งาน เช่น Droid ตัวแรกจะมีปัญหากับความละเอียด 800x480 ในขณะที่ Nexus S ทำได้สบาย
  • การประมวลผลเนื้อหาโดยใช้ hardware acceleration ถูกเพิ่มเข้ามาใน Android 3.0 แต่ปิดเอาไว้ไม่ใช้งาน เว้นเสียแต่ว่านักพัฒนาแอพจะระบุให้ใช้ GPU ช่วยประมวลผลเท่านั้น
  • Android 4.0 ใช้เอนจิน hardware acceleration ตัวเดียวกับ 3.0 แต่เปิดมาแต่แรก และถ้าแอพระบุว่าตัวมันเองทำงานบน Android 4.0 ได้ ตัวระบบปฏิบัติการก็จะเรียกใช้ hardware acceleration ทั้งหมด

    ประเด็นเรื่องความช้า-เร็วของการแสดงผลใน Android

  • hardware acceleration ไม่ได้มีแต่ข้อดีเสมอไป เพราะโพรเซสของแอพจะต้องเปลืองแรมอีก 8MB ต่อโพรเซสสำหรับเรียกใช้ OpenGL ดังนั้นงานบางงานในตัวระบบปฏิบัติการ Android 4.0 จึงเลือกจะไม่ใช่ hardware acceleration เพื่อประหยัดแรม โดยเฉพาะงานที่เพียงซีพียูลำพังสามารถทำได้ดีอยู่แล้ว (เช่น ไม่ควรจะเรนเดอร์ status bar ด้วย OpenGL เพราะไม่คุ้ม)

  • hardware acceleration ไม่ใช่ "คำตอบสุดท้าย" ที่ทำให้ Android ลื่นขึ้น เพราะยังมีประเด็นด้านเทคนิคอื่นๆ อีกมาก เช่น การปรับปรุงประสิทธิภาพของ scheduler ระหว่างเธร็ดที่ทำงานเบื้องหน้าและเบื้องหลัง (อยู่ใน 1.6) หรือการปรับปรุงระบบการป้อนข้อมูล (อยู่ใน 2.3) การปรับปรุง garbage collector เป็นต้น
  • บางครั้ง hardware acceleration กลับทำให้การแสดงผลช้าลงด้วยซ้ำ โดยยกกรณีทีมงานของกูเกิลเคยพบว่าเลื่อนหน้าจอบน Nexus S/ICS ช้ากว่า Gingerbread ในบางกรณี ซึ่งค้นพบว่าเป็นปัญหาของ timing ของการประมวลผล ถึงแม้สมรรถนะในการประมวลผลจะสามารถวาดหน้าจอที่ 60 fps ได้ก็ตาม ก็ยังกระตุกเพราะเรื่องอื่น
  • เวลาคนเปรียบเทียบการเลื่อนหน้าจอใน Android และ iOS เหตุผลส่วนมากที่ Android ช้ากว่าไม่ได้เป็นเพราะไม่มี hardware acceleration แต่เป็นเพราะวิธีการเรนเดอร์เว็บเพจของ Android ในอดีต มองว่ามันเป็น list ที่ต้องค่อยๆ วาดบนหน้าจอไปตามลำดับ ทำให้การเลื่อนหรือซูมมีปัญหากับส่วนที่ยังไม่ได้วาดบนจอ แต่ใน Android 3.0 เปลี่ยนมาเรนเดอร์แบบ tiles ที่แก้ปัญหาเรื่องนี้ได้
  • hardware acceleration ไม่ช่วยแก้ปัญหาเรื่องประสิทธิภาพของกราฟิกทั้งหมด เพราะ GPU ก็มีข้อจำกัดทางสมรรถนะอยู่ ตัวอย่างเช่น Tegra 2 สามารถเรนเดอร์พิกเซลได้สูงสุด 2.5 เท่าของความละเอียด 1280x800 ที่ 60fps ซึ่งในความเป็นจริงแล้ว การแสดงผลกราฟิกไม่ได้วาดแค่ 1280x800 แต่ต้องวาดวัตถุต่างๆ บนหน้าจอซ้อนกันหลายๆ ชั้นแล้วค่อยนำมาประกอบเข้าด้วยกัน (compositing) ซึ่งลำพังแค่นี้ก็ใช้พิกเซลครบโควต้าของ GPU แล้ว
  • Android 3.0 ใช้เทคนิคหลายอย่างช่วยให้พลังของ GPU พอใช้สำหรับการแสดงกราฟิก เช่น การวาดหน้าต่างเฉพาะส่วนที่ไม่บังกัน (overlay) จะได้ไม่ต้องเรนเดอร์ภาพของหน้าต่างทั้งหมด, วาดภาพพื้นหลังเก็บไว้ในหน่วยความจำ เวลาเลื่อนจอก็เลื่อนภาพตาม จะได้ไม่ต้องวาดใหม่ทุกครั้งที่เลื่อน เป็นต้น
  • ยิ่งความละเอียดของหน้าจอเพิ่มขึ้น การแสดงผลหน้าจอที่ 60 fps จะยิ่งขึ้นกับพลังของ GPU และแบนด์วิธหน่วยความจำของ GPU ซึ่งเธอแนะนำว่านักพัฒนาควรใส่ใจกับแบนด์วิธตรงนี้ให้มาก ถ้าแอพที่ทำอยู่เกี่ยวข้องกับกราฟิก

รายละเอียดแบบเต็มๆ แนะนำให้อ่านต้นฉบับครับ

ที่มา - +Dianne Hackborn via The Verge

Get latest news from Blognone

Comments

By: sachikogear
iPhoneWindows PhoneAndroidSymbian
on 6 December 2011 - 22:08 #361103
sachikogear's picture

เพราซอฟแวร์ ไม่ได้เกิดมาเพื่อฮาร์ดแวร์ มันร้อยพ่อพันแม่เกินไป ใครจะเขียนโปรแกรมครอบคลุมไหว
iOS ทดสอบกับฮาร์ดแวรไม่กี่รุ่น ถูกเขียนขึ้นมาโดยเฉพาะ เกิดมาเป็นคู่กันและกัน Perfect match

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 6 December 2011 - 22:14 #361104 Reply to:361103

ผมว่า Windows Phone ก็หลายพ่อหลายแม่นะ? (แต่ก็ไม่เท่าแอนดรอยด์)


By: the mee
iPhoneAndroidWindows
on 6 December 2011 - 22:32 #361115 Reply to:361104

Windows Phone กำหนด สเปกและ อุปกรณ์ซะ ขนาดนนั้นไม่ลื่นก็ไม่รู้ว่าไงแล้ว ครับ
แทบจะไม่ได้ต่างกะ iOS เลย

By: salapao
iPhoneWindows PhoneUbuntu
on 6 December 2011 - 22:56 #361134 Reply to:361115
salapao's picture

กำหนด สเปก หรือ ผมว่า สเปก ของเครื่อง แอนดรอย ยังแรงกว่าของ วินโดว์โฟน อีก

By: Slimy
AndroidUbuntu
on 7 December 2011 - 09:14 #361318 Reply to:361134

Android ไม่เคยกำหนดขั้นต่ำสเปคนิครับ

By: bukindepsbbl
Windows Phone
on 7 December 2011 - 13:51 #361438 Reply to:361318
bukindepsbbl's picture

ผมว่า HD7 ลื่นกว่า S2

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 7 December 2011 - 14:24 #361453 Reply to:361318

รู้สึกจะมีกำหนดนะครับ แต่ไม่ทำตามก็ได้ แค่ไม่ได้แอพของกูเกิลไปใส่

แล้วก็เท่าที่ทราบ หลายเสียงบอกว่าขั้นต่ำของ WP7 ก็ทำงานได้ลื่นกว่าขั้นสูงของแอนดรอยด์นะ (ผมยังไม่มีโอกาสสอยมาใช้จริง แต่จากที่เล่น สเป็คระดับเดียวกับ WP7 ลื่นกว่า)


By: Slimy
AndroidUbuntu
on 7 December 2011 - 16:51 #361519 Reply to:361453

ผมเห็นข่าวลือเรื่องกำหนดขั้นต่ำสเปคถึงรุ่นใหม่ทีไร ก็มีข่าวแก้จาก GG ว่าไม่ใช่ทุกที ก็เลยเห็นว่ามันไม่มีสเปคขั้นต่ำน่ะครับ

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 7 December 2011 - 17:19 #361544 Reply to:361519

ผมจำได้ว่ามีกำหนดอะไรสักอย่างครับ เพื่อให้ได้เอาแอพของกูเกิลไปใส่ ไม่ใช่กำหนดว่าต้องสเป็คขั้นต่ำเท่านี้ ถึงจะรันแอนดรอยด์ได้


By: kobellza
Windows PhoneAndroidIn Love
on 6 December 2011 - 22:16 #361105 Reply to:361103
kobellza's picture

มันเป็นแบบนี้เองหรอครับ อืมๆๆ.

By: panitw
Windows Phone
on 6 December 2011 - 22:49 #361130 Reply to:361103
panitw's picture

ผมว่าข้ออ้างครับ ปัญหานี้มันเป็นระดับ Architecture ของ OS เป็นหลัก ไอ้ Hardware ร้อยพ่อพันแม่มันเป็นเรื่องรองๆๆๆมาก

จากที่ยกมาด้านบน Android เป็น Multitask 100% การที่จะเปิด HW Acceleration สำหรับทุก Process ต้องเสีย 8MB แต่ละ Process ซึ่งเปลือง RAM มาก และ OS ก็ไม่รู้ (อาจจะรู้แต่จัดการไม่ดี) ว่า App ไหนควรจะ Focus เทียบกับ iOS ที่เป็น Multitask เฉพาะ App ของระบบ ทำให้ CPU/GPU ได้ Focus กับ Process ของ App ที่กำลัง Run อยู่ได้เต็มที่ แต่ก็ต้องแลกมาด้วยสิ่งที่ User รำคาญในช่วงแรกๆคือเปิดโปรแกรมอื่นแล้วพอย้อนกลับมาใช้โปรแกรมที่แล้วต้องโหลดใหม่หมด ซึ่ง Apple ก็แก้เกมด้วยระบบ Multitask เทียม โดยใช้หลักการของ Process Hibernation แทน ซึ่งก็ช่วยให้ประสบการณ์ของ User ดีขึ้นมาก สามารถสลับ Process ได้ แต่ยังมีข้อดีของ Single Task อยู่

By: panitw
Windows Phone
on 6 December 2011 - 23:00 #361132 Reply to:361130
panitw's picture

บทความอธิบายง่ายๆเรื่อง Multitask ของ iOS กับ Andriod

http://bit.ly/9CGSkq

By: Fasndee
ContributorAndroidWindows
on 7 December 2011 - 01:52 #361236 Reply to:361130
Fasndee's picture

คิดว่าส่วนอื่นก็คงจะเกี่ยว และอาจจะเป็นข้องอ้างจริง ๆ เหมือนกัน แต่ผมเคยมีประสบการณ์กับ PC ถึงจะไม่ใช่มือถือ แต่ก็มีประเด็นที่น่าสนใจว่า

เครื่องที่ผมประกอบเองนั้น มีอุปกรณ์ราคาแพง รุ่นสูงกว่าอีกเครื่องที่เป็นยี่ห้อ Dell ของอีกหน่วยงานหนึ่ง แต่แปลกที่ว่า โปรแกรมบางตัวนั้น ความลื่น ความคล่องตัวของเครื่อง Dell นั้น รู้สึกได้เลยครับ ผมคิดว่า hardware ที่ผ่านการทดสอบว่าเหมาะสม เข้ากันได้อย่างดี กับ software ที่ออกแบบให้เหมาะกับ hardware ที่กำหนดมานั้นช่วยตรงจุดนี้ได้ไม่แพงเครื่องแรง ๆ เลยละครับ


เพจตัวอย่างผลงานถ่ายภาพ / วีดีโอ

By: i_heatie
AndroidWindowsIn Love
on 6 December 2011 - 22:21 #361107
i_heatie's picture

เดี๋ยวจะมี blogger เก๋ ๆ คนนึงออกมาบอกว่า ผมไม่สน ผมใช้อย่างเดียว ผมจะสนทำไม สนแค่มันไม่ลื่น

By: WWII
iPhoneAndroid
on 6 December 2011 - 23:02 #361139 Reply to:361107
WWII's picture

มีผู้บริโภคกากๆ มาทำหน้าที่แทนแล้วด้านล่าง :P

By: sachikogear
iPhoneWindows PhoneAndroidSymbian
on 6 December 2011 - 23:25 #361154 Reply to:361139
sachikogear's picture

ต่อกันเลยทีเดียว ประโยคเดียวกันเปะๆ 55+

By: nidlittle
iPhoneWindows
on 6 December 2011 - 22:26 #361108

ผมไม่สน ผมใช้อย่างเดียว ผมจะสนทำไม สนแค่มันไม่ลื่น

จากผู้บริโภคกากๆจนๆที่อยากใช้เงินให้คุ้มค่าที่สุดคนนึง

By: sathdr
iPhoneAndroidSymbian
on 6 December 2011 - 22:27 #361109
sathdr's picture

ถ้าเป็น Steve Jobs แกคงบอกว่าไม่ต้องมาอธิบาย ไปทำมาใหม่ให้ลื่นๆซะ

By: darkleonic
ContributorAndroidWindowsIn Love
on 6 December 2011 - 22:28 #361110 Reply to:361109
darkleonic's picture

+1 เลยทีเดียว

ไปทำใหม่ซะครับ ไม่ใช่ให้ยอมรับสภาพแบบนี้ ไอ้เทคนิคหลายๆ ตัวผมก็เห็นบน DirectX เป็นชาติเศษแล้ว
การเอามาอยู่บน Linux มันท้าทายขนาดนั้นเลยสินะ


I need healing.

By: tstcnr1u
iPhoneWindows PhoneAndroidUbuntu
on 7 December 2011 - 00:14 #361182 Reply to:361110

Linux UI มันช้าตั้งแต่โครงสร้างข้างล่างละ ถึง Mac ดูเหมือนจะมาคล้ายๆกันแต่โครงสร้าง OS ที่จะรองรับ UI มันต่างกันลิบลับเลย

By: darkleonic
ContributorAndroidWindowsIn Love
on 7 December 2011 - 00:20 #361188 Reply to:361182
darkleonic's picture

Mac กับ Linux มีบรรพบุรุษร่วมกันครับ ประดุจคนกับลิง


I need healing.

By: TeamKiller
ContributoriPhone
on 7 December 2011 - 00:35 #361192 Reply to:361188
TeamKiller's picture

OS ไหนเป็นลิง เป็นคนหว่า

By: cwt
AndroidRed Hat
on 7 December 2011 - 00:46 #361201 Reply to:361188

Mac กับ Linux ไม่ได้มีบรรพบุรุษร่วมกันเลยแอ้แต่นิดเดียวครับ Mac สืบสายตระกูลมาจาก UNIX ส่วน Linux ไม่ได้เอา code ใดๆ ในส่วนของ kernel มาจาก UNIX เลย

By: darkleonic
ContributorAndroidWindowsIn Love
on 7 December 2011 - 11:10 #361372 Reply to:361201
darkleonic's picture

สงสัยผมจะใช้คำผิดจริงๆ

Linux = UNIX ของ Linus

แล้วผมต้องใช้คำยังไงดี?


I need healing.

By: pexza
AndroidUbuntuWindows
on 7 December 2011 - 02:36 #361258 Reply to:361188
pexza's picture

ไม่เชิงนะครับ
Linux เลียนแบบ Unix แต่ Mac OS X พัฒนามาจาก UNIX ตระกูล BSD

By: amdo
iPhoneAndroidWindows
on 6 December 2011 - 22:31 #361114 Reply to:361109
amdo's picture

+1

By: sunback
Contributor
on 6 December 2011 - 22:32 #361116 Reply to:361109
sunback's picture

ถ้าจำเรื่องเสาอากาศกันได้ จะจำได้ว่าค่ายผลไม้เคยออกมาอธิบายยกใหญ่เหมือนกัน ;P

By: WWII
iPhoneAndroid
on 6 December 2011 - 22:59 #361137 Reply to:361116
WWII's picture

เพราะปัญหานั้นแก้ไม่ได้แล้ว ผลิตออกไปแล้ว เลยต้องแถกันหน่อย เอ๊ะ! หรือว่าปัญหาไม่ลื่นของ Android จะแก้ทาง software ไม่ได้แล้วเหมือนกัน :P

By: Golffy
ContributoriPhoneIn Love
on 6 December 2011 - 23:04 #361140 Reply to:361137
Golffy's picture

แก้ได้ แต่ไม่ได้เรียกคืนแล้วผลิตใหม่ให้ขาดทุนย่อยยับ เพราะตอนนั้นก็ยังขายได้ขายดีอยู่

ส่วนตัวที่แก้เรื่องเสาเสร็จแล้ว ก็ชุบตัวอัพสเปคใหม่เป็น 4S ชะละล่า (และขายดีตามเคย)


@mamuang

By: Go-Kung
iPhoneWindows PhoneAndroidBlackberry
on 6 December 2011 - 23:32 #361158 Reply to:361137

แก้ได้แต่คงต้องรื้อใหม่ตั้งแต่ kernel กันเลย

google คงไม่เลือกทำวิธีนี้แน่ๆ เพราะเท่ากับรีเซ็ท Android กลับไปที่ 1.0 ใหม่อีกรอบ

แอพต่างๆก็ต้องมาลุ้นว่าจะใช้ได้ไม่ได้ทุกตัว เสียความเชื่อมั่นลูกค้าไปเยอะ

By: mk
FounderAndroid
on 7 December 2011 - 13:41 #361429 Reply to:361158
mk's picture

พวก ROM cooker นี่เค้าเปลี่ยนเคอร์เนลกันเป็นว่าเล่นเลยนะครับ

By: xxxooo
Windows PhoneWindowsIn Love
on 8 December 2011 - 01:22 #361782 Reply to:361158

ผมว่า ถ้ามีจังหว่ะ ยังไง Google ก็คงต้องทำ

เหมือนที่ MS เลือกที่จะกลบฝัง Windows Mobile

แม้จะเสียความเชื่อมั่น แต่เพื่อสิ่งที่ดีกว่า

ไม่งั้นในอนาคต Android ก็อาจตายไปเองก็ได้

กองทัพมดกับยักษ์พิการ อาจค่อยๆ โดน 2 ยักษ์ กระทืบตาย

By: salapao
iPhoneWindows PhoneUbuntu
on 6 December 2011 - 23:04 #361141 Reply to:361116
salapao's picture

แต่เขาก็ไปทำใหม่แล้วนะ

By: KenDeb
ContributoriPhoneAndroidUbuntu
on 7 December 2011 - 14:28 #361454 Reply to:361109
KenDeb's picture

อย่าขี้เกียจ กลับไปแก้ไขให้มันดีซะ +222

By: tirakarn
AndroidUbuntuWindows
on 6 December 2011 - 22:31 #361112

เคยสงสัยอยู่เหมือนกันว่า hardware แรงๆระดับเทพ ทำไมบางทีมันกระตุก

By: mednoon on 6 December 2011 - 22:35 #361118

แก้ algorithm ล้วนๆครับ

By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 6 December 2011 - 22:36 #361119
UltimaWeapon's picture

อีกหนึ่งเหตุผลคือ "เพราะมันไม่ใช่ Native แบบ iOS"

By: GooEng
ContributorWindows PhoneAndroidUbuntu
on 6 December 2011 - 23:49 #361167 Reply to:361119
GooEng's picture

อีก 1 เหตุผล เพราะมันเป็น Java


คำตอบของข้า คือ ประกาศิต

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 6 December 2011 - 23:59 #361177 Reply to:361167
PaPaSEK's picture

บังอาจ!! จาวาเร็วส์!!!

By: Thaina
Windows
on 7 December 2011 - 00:07 #361180 Reply to:361177

+666

By: cloverink
iPhoneAndroidUbuntuWindows
on 7 December 2011 - 03:16 #361270 Reply to:361177
cloverink's picture

เย่~

By: Pinery
ContributoriPhoneAndroidIn Love
on 7 December 2011 - 10:18 #361339 Reply to:361177

555+

By: rromk
AndroidUbuntu
on 7 December 2011 - 01:31 #361224 Reply to:361167

dalvik != jvm เน้อ

By: Thaina
Windows
on 7 December 2011 - 01:40 #361228 Reply to:361224

ภาษาฐานเดียวกัน ไม่มี struct ไม่มี pointer เป็น Virtual Machine อวดฉลาดเหมือนๆกัน จะให้รอดเรื่อง Performance คงยากครับ

ป.ล. Virtual Machine อวดฉลาด หมายถึงพวก Virtual Machine ที่พยายามช่วยคอมไพล์ให้คนเขียนไปซะทุกอย่าง พยายามไม่ให้คนเขียนคิดเองเลือกเอง แล้วชอบมาโม้ว่าฉลาดมากพอที่จะ Optimize ให้ แล้วปรากฏว่าไม่สามารถทำได้จริง ตัวอย่างเช่น JVM และเหล่า JavaScript Compiler ทั้งหลาย ต่างกับ Virtual Machine ที่ยอมรับความโง่ และเลือกที่จะมีเครื่องมือ Option ให้คนเขียนเลือกใช้ แลกกับความยุ่งยากเล็กน้อย

By: rromk
AndroidUbuntu
on 7 December 2011 - 02:42 #361261 Reply to:361228

กำลังจะสื่อะไรอ่ะครับ งง... ไม่มี struct (แปลว่าอะไร?) ไม่มี pointer มันทำให้ช้าเหรอครับ?

virtual machine มันไม่เกี่ยวกับภาษานะครับ โดยหลักการแล้วคุณจะเขียนโปรแกรมเป็นภาษาอะไรก็ได้ ขอแค่ให้ compile มาเป็น bytecode ของ virtual machine นั้นเท่านั้น ใน android คุณสามารถเขียนโปรแกรมด้วยภาษา java แต่ก่อนจะออกมาเป็น app ที่รันได้บน android มันจะต้องผ่านการแปลงจาก

java -> java bytecode -> dalvik bytecode

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

ช่วยยกตัวอย่าง virtual machine ที่ "ยอมรับความโง่" ให้ดูซักตัวสิครับ

By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 7 December 2011 - 02:53 #361266 Reply to:361261
UltimaWeapon's picture

"และขณะเดียวกันมันก็ไม่ได้ช้ากว่า native ทุกกรณีเช่นกัน"

แค่เริ่มต้นก็ช้ากว่าละคับ เสียเวลาคอมไพล์เป็น Machine Code อีก ไหนจะเรื่องโครงสร้างของภาษาที่ไม่เอื้อต่อการแปลงเป็น Machine Code อีก ไหนจะใช้แรมมากกว่าอีก ไหนจะระบบ Garbage Collection อีก ฯลฯ ไม่มีอะไรเร็วกว่าสักอย่าง มีดีแค่เขียนง่าย พัฒนาเร็ว รันได้หลาย Architecture

By: rromk
AndroidUbuntu
on 7 December 2011 - 05:54 #361289 Reply to:361266

เอามาจากไหนครับว่าโครงสร้างของภาษาไม่เอื้อต่อการแปลงเป็น machine code? virtual machine มันเกี่ยวอะไรกันกับโครงสร้างภาษา? ในเมื่อ virtual machine มันสนใจแต่ bytecode

แล้วอีกอย่างเขียนโปรแกรมบนไหนครับที่มันไม่ต้อง compile? ถ้าพูดถึง JIT มันไม่ได้ compile ทั้งโปรแกรมใหม่นะครับ มัน compile เฉพาะส่วนที่รันบ่อยๆเท่านั้น ส่วนที่เหลือก็เป็น interpreter ตามปกติ ซึ่งก็อย่างที่ผมบอกไว้ มันไม่ได้เร็วขึ้นทั้งหมด แต่ก็ไม่ได้ช้ากว่าไปซะหมดครับ

และอีกอย่างนึง ถึงแม้ว่า app จะเขียนให้รันบน virtual machine แต่ api call ส่วนใหญ่แล้วจะลงท้ายด้วยการรัน native code ใน library ต่างๆทั้งนั้นแหละครับ

แนะนำให้ดู Google I/O 2010 - A JIT Compiler for Android's Dalvik VM ครับ ถ้าสนใจเรื่อง JIT ของ dalvik

By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 7 December 2011 - 12:15 #361401 Reply to:361289
UltimaWeapon's picture

เพราะมันมีฟีเจอร์หลายอย่างเกินไปนั่นละคับ ถึงไม่เอื้อต่อการแปลงเป็น Machine Code ถ้าคุณจะตอบว่า มันก็แปลงเป็น Machine Code ได้เหมือนกัน ได้ Code ออกมาเหมือนพวกภาษา Native อยู่ดี แล้วส่วนที่มันเป็นฟีเจอร์ของภาษาที่เพิ่มขึ้นมาละคับ? มันไม่ต้องใช้งาน CPU เลยหรือ? ยกตัวอย่างเช่น Garbage Collection คุณคิดว่า CPU ไม่ต้องมาประมวลผลตรงนี้เลยงั้นเหรอ? สรุปง่ายๆคือมันมี Overhead เพิ่มขึ้นมานั่นละคับ

ดูเหมือนคุณจะเข้าใจอะไรผิดเรื่องการคอมไพล์ไปละ เอาเป็นว่า C ก็คอมไพล์เหมือนกัน แต่มันออกมาเป็น Native Code เลย การทำงานทุกอย่างควบคุมได้ด้วยตัวโปรแกรมเมอร์เอง อยากจะจอง Memory ตอนไหนก็เลือกได้ อยากจะ Free Memory ตอนไหนก็เลือกได้ ฯลฯ

ลงท้ายด้วยการรัน Native Code นั่นมันใช่คับ แต่พวก Code ที่ทำงานก่อนที่จะถูกเรียกมาใน Native API ละ?

By: rromk
AndroidUbuntu
on 7 December 2011 - 17:03 #361531 Reply to:361401

ถ้าคุณมองในแง่ที่ว่า "การแปลงเป็น machine code" คือการแปลงทั้งโปรแกรมเป็น native code อันนี้ผมก็จะเห็นด้วยว่ามันไม่เอื้อ เพราะว่าตัว bytecode มันถูกออกแบบมาให้รันบน virtual machine ไม่ใช่ native CPU อยู่แล้ว แต่ก็อย่างที่ผมบอกไป การทำ JIT มันไม่ได้คอมไพล์ bytecode -> native code หมดทั้งโปรแกรม ถ้าเจาะจงมาที่ JIT ของ dalvik มันจะคอมไพล์เฉพาะโค้ดตรงส่วนที่มีการรันบ่อยๆ เท่านั้น ซึ่งถ้าดูจากตัวเลขที่ google ให้มา (ดูตามลิ้งค์ google IO ที่ผมแปะไว้ข้างบน) มันอยู่ที่ระหว่าง 2 - 10% ของ bytecode ทั้งหมดเท่านั้น ซึ่ง bytecode ที่ถูก JIT แปลงเป็น optimized native code แล้วก็จะถูกเก็บไว้ใน translation cache และถูกเรียกใช้โดยตรงเลยถ้ามีการเรียกใช้โค้ดส่วนนั้นซ้ำอีก

แน่นอนว่าส่วนที่เป็นฟีเจอร์ต่างๆของ virtual machine ไม่ว่าจะเป็๋น GC, exception handling, object reference counter, etc มันกิน CPU และก็เป็น overhead สำคัญที่อาจเป็นจุดที่ทำให้เกิดการกระตุกได้ แต่มันก็ได้ถูกพัฒนาให้ overhead ตรงส่วนนี้ลดลงอยู่ตลอดเวลาเช่นกัน

การเขียนโปรแกรมด้วย C ทำให้คุณสามารถควบคุมการรทำงานของโปรแกรมได้มากกว่าการใช้ภาษาที่รันบน virtual machine ก็จริง แต่ปกติแล้วคุณก็ไม่ได้ควบคุมมันทั้งหมดหรอก ยกตัวอย่างการ allocate memory ด้วย malloc/free คุณคงไม่ได้เขียน library เพื่อทำการ allocate/free เองใช่ไหม? คุณต้องเรียกผ่าน standard library แล้วทีนี้คุณควบคุมได้ไหมว่าจะให้มัน allocate memory ส่วนไหนมาให้? คุณป้องกันการเกิด memory fragmentation ได้ไหม?

ที่ผมพูดมาเพียงเพื่อจะบอกว่า การมี overhead มันไม่ได้ทำให้ระบบ "แย่ลง" เสมอไปครับ มันอยู่ทีการ compromise กันระหว่าง manageability กับ stability และ speed ครับ

By: Thaina
Windows
on 7 December 2011 - 06:24 #361292 Reply to:361261

การที่มันจะเร็วช้าอยู่ที่ virtual machine มัน "ฉลาด" แค่ไหน

นั่นแหละครับประเด็นที่ผมบอกว่า ทั้ง Java และ DALVIK มันคือ "Virtual Machine ที่อวดฉลาด"

การมี struct หรือ pointer มันเป็นทั้งในตัวภาษาและในตัว bytecode ครับ ผมขอยกตัวอย่าง C# นะ ภาษานี้มันรองรับ struct ทั้งในตัวภาษาและ bytecode จนถึง Virtual Machine .NET ของมัน ก็รองรับ struct

ซึ่งตรงจุดนี้ผมเรียกว่า "มันยอมรับว่ามันโง่" มันจะไม่พยายามเดาว่าตรงจุดไหนควรเป็น heap object ตรงจุดไหนควรเป็น stack allocation มันยอมรับว่า Garbage Collector ของมันไม่ได้ดีเท่าไหร่ ทำงานบ่อยไป Performance ก็ตก มันจึงเลือกที่จะให้อิสระกับ Programmer มาคิดเองว่า ถ้าอยากได้ Performance ก็ต้องบริหาร Memory ด้วยการใช้ struct และฟีเจอร์ option ต่างๆ

ในขณะที่ Java ไม่มี struct และทั้ง JVM และ DALVIK ไปจนถึง bytecode ไม่รองรับการมี struct และข้ออ้างของฝ่าย Java คือ Java มี JVM ฉลาด สามารถคาดเดาได้เองว่า object ไหนควรจะจัดการยังไงถึงจะมีประสิทธิภาพ รวมไปถึง GC ที่ดีสุดยอด เขียนมาเถอะ ปล่อยให้ Java ทำงานตรงนี้ให้เอง

แต่ปรากฏว่า สุดท้ายมันเป็นการ spoil โปรแกรมเมอร์ ในขณะที่ JVM มันไม่ฉลาดขนาดนั้น มันปล่อย performance drop บ่อยๆ มันไม่สามารถบริหาร Memory ได้อย่างที่ควรเป็นเสมอไป เพราะความซับซ้อนของโปรแกรมที่คนเขียนมันไม่ง่าย(และโดยเฉพาะคนเขียนที่โดนสปอยล์ยิ่งทำให้งาน Optimize ของ Java ยากขึ้น) แม้กระทั่ง GC ที่อวดนักหนา ก็เคยทำ Memory Leak มาแล้วในบางเวอร์ชั่น

สรุปคือ Virtual Machine ในปัจจุบันมันยังตามสมองคนไม่ทัน แต่ JVM ก็ยังจะอวดฉลาดอยู่ร่ำไป และที่ดำเนินรอยตามคือ DALVIK ผมก็ไม่เห็นว่ามันจะต่างกันได้ซักกี่มากน้อย

By: ShiRaTo
Android
on 7 December 2011 - 12:18 #361404 Reply to:361292

ผมเห็นด้วยกับประเด็น GC แต่ไม่เห็นด้วยกับกรณี Struct ที่อธิบายมานะครับ เดี๋ยวนี้น่าจะไม่ค่อยใช้ Struct กันแล้วครับ

เพราะ MSDN ก็บอกว่า Struct ใช้ดีแค่บางเคส เช่นกรณีมีข้อมูลไม่เกิน 16 Bytes, ถ้าใหญ่กว่านี้ Struct อาจจะแย่กว่า class..

หรือ Microsoft MVP เองก็บอกว่า "In reality it is incredibly rare to write a struct in .NET"

ดังนั้นตัวอย่างที่อธิบายมาเรื่อง Struct ผมไม่เห็นด้วย เพราะว่า Java ไม่มี Struct มันก็ไม่ได้แย่อะไร ในโลกแห่งความเป็นจริง ใช้ class กันหมดอยู่แล้ว

แต่ถ้าประเด็นเรื่อง GC, Dispose ใน C# ที่ให้อิสระ programmer clear memory เอง อันนี้ผมเห็นด้วย เพราะอยากให้ Java ทำเหมือนกันครับ

By: Thaina
Windows
on 7 December 2011 - 19:48 #361506 Reply to:361404

มันอยู่ที่ว่าใช้ struct ยังไงด้วยครับ

struct มันมี Characteristic ในการใช้ที่ต่างจาก class ถ้าศึกษาดูจะรู้ว่า ทำไมมันถึงสร้างปัญหาต่างๆที่ว่า และ ใช้ยังไงถึงจะไม่สร้างปัญหานั้น และจะเข้าใจได้ว่า ใช้ยังไงถึงจะเพิ่มประสิิทธิภาพได้

จุดสำคัญคือถ้าเรารู้ว่า struct มันไม่ควร copy บ่อยๆ เราพลิกแพลงไปเขียนโค้ดที่เหมาะสม เราสามารถ ref/out มันได้เวลาส่งเข้า function ตรงนี้ผมก็เรียกว่า มันยอมรับว่ามันโง่ มันไม่เดาให้เราว่าควรส่ง struct เข้าไปในฟังค์ชั่น แบบ reference หรือแบบ value มันให้เราบังคับมันเอง (ซึ่ง ถ้าขนาดของ struct ใหญ่กว่า 16 byte ก็ควรใช้ ref ในการโยนเข้าฟังค์ชั่น และไม่ควร Copy มัน นี่เป็นเรื่องที่รู้กันในคนเขียน C#)

จุดสำคัญอีกอย่างคือ struct มันลดการทำงานของ GC ครับ เพราะ struct ไม่ใช้ GC แต่เก็บข้อมูลได้ โดยหลักแล้วที่เห็นชัดมากๆ คือ array ครับ array ของ struct คือก้อนเมมโมรี่ ในขณะที่ array ของ class เป็นกองพอยน์เตอร์ ที่ต้องคอย new ทีละอัน แถมยังเสียประสิทธิภาพไปในการ reference หลายชั้น

เช่นเดียวกับการมี object ใน class ที่มันต้อง reference หลายชั้น แต่กับ struct มัน reference ชั้นเดียว แล้วมันก็จะชี้ตรงไปที่ memory ก้อนนั้น

และปัญหาสำคัญมากๆอีกอย่างในทางการโปรแกรมคือ struct มันคือ ValueType ครับ ใน Java เราต้องพยายามคิดว่าของทุกอย่างคือ object และต้องคอย clone มัน เวลาที่เราต้องการแค่ copy

คนใช้ Java อาจจะมองว่ายุ่งยากที่ต้องมานั่งดู ว่า variable ตัวไหนคือ struct ตัวไหนคือ class แต่สุดท้าย ถ้าชินแล้ว โค้ดมันจะไม่รก และตรงไปตรงมา ไม่ต่างกับการใช้ int หรือ float ใน Java (เทียบระหว่า Matrix m = object.Transform.Clone() กับ Matrix m = object.Transform)

ในโปรแกรมประเภทธุรกิจที่ไม่ต้องการ performance มาก ทุกคนก็เขียน C# แบบเดียวกับที่เขียน Java แหละครับ มีแต่ class ไม่ต้องไปทำอะไรกับ struct แทบไม่ต้องเขียนจริงๆนั่นแหละ

แต่คนที่ทำงานแบบที่เรียกว่า ใช้ C# แทน C++ ทำงานประเภท performance สูงๆ จะรู้ครับว่ามัน Critical มากๆ อย่างเช่นเกม ยิ่งเป็นเครื่อง XBox (ที่ GC มันกากมาก) การเขียนโปรแกรมแบบพลิกแพลงเพื่อ performance เป็นอะไรที่สำคัญครับ และ struct นี่ตัวจี๊ดเลย ขาดไปนี่แทบจะเรียกว่าทำไม่ได้

ซึ่ง การที่ C# มี struct ผมถึงชี้ว่า เป็น "การยอมรับว่ามันโง่" มันไม่รู้ว่ามันจะฉลาดขึ้นมาเมื่อไหร่ มันถึงให้อิสระว่า มีเครื่องมือให้เขียนโปรแกรมแบบล้วงลึกไปถึงระดับการควบคุม Memory ให้

การ "มี struct" และ "รู้จักใช้" เป็นข้อถกเถียงจากฝ่าย C# มานานแล้วครับว่า ต้องการให้ Java มี struct ไปเพื่ออะไร ลองไปหาอ่านดูได้ครับ มีคนอธิบายไว้เยอะมากว่าทำไม Java ถึงควรมี struct เหมือน C#

By: rromk
AndroidUbuntu
on 7 December 2011 - 21:16 #361638 Reply to:361506

ถ้าต้องการ raw performance มันก็มี JNI ให้ใช้อยู่แล้วนี่ครับ??

By: Thaina
Windows
on 7 December 2011 - 22:35 #361657 Reply to:361638

รู้จักคำว่า OverHead มั้ยครับ?

ก็เป็นซะแบบนี้อะครับ สาวกจาว่า ต้องพยายามโยนไปโน่นมานี่เพื่อที่จะบอกว่า Java ใช้ได้อยู่แล้ว

นี่กำลังพูดกันถึงเรื่อง DALVIK/JVM มันช้า ไหนบอกว่า DALVIK ฉลาดนักหนา

การที่มันจะเร็วช้าอยู่ที่ virtual machine มัน "ฉลาด" แค่ไหน

สุดท้ายก็ต้องโยนไปหา Native อยู่ดี

By: rromk
AndroidUbuntu
on 7 December 2011 - 23:43 #361721 Reply to:361657

ถามว่าผมรู้จัก overhead ไหม ก็รู้สิครับ ใน rep ข้างบนก็ยังพูดถึงอยู่เลย ว่าแต่ได้อ่านที่ผมเขียนหรือเปล่า?

แล้วก็มาอ้างเป็นเรื่องการเมืองอีกละ ก็ในเมื่อระบบมันมีช่องทางให้ใช้อยู่แล้วสำหรับบาง case ถ้าคุณดันไม่รู้จักจะใช้ซะเองแล้วจะมาบ่นหาพระแสงอะไรครับ?

ในความเห็นผม ทุกภาษาทุกระบบมันไม่มี perfect หรอกครับ ย่อมต้องมีข้อดีข้อเสีย ถ้าอ้างแบบคุณ งั้นทำไมไม่ใช้ assembly ไปให้มันรู้แล้วรู้รอดล่ะครับ?

By: Thaina
Windows
on 8 December 2011 - 00:15 #361742 Reply to:361721

ถ้ารู้จักคำว่า OverHead ก็แปลว่าควรจะรู้อยู่แล้วนะครับว่าการใช้ JNI มีปัญหาเรื่องการทำงานกับ struct เพราะในฝั่ง Native การมี struct เป็นเรื่องธรรมดา แต่ใน Java ใช้ JNI ก็ต้อง Serialize จาก class ซึ่งตรงนี้ก็เป็นปัญหา Performance อีกเช่นกัน

ซึ่งต่างกับ .NET ที่สร้าง struct ให้ Map กับ struct ใน Native ได้โดยตรง แถมยัง pass struct by reference ได้ตรงกับ Native ได้ด้วย พูดแบบไม่เกรงใจเลยว่าแม้แต่เรื่องนี้ .NET ก็ทำมาดีกว่า เพราะไม่ได้อวดฉลาดมาแต่แรก

แล้วด้วยฟีเจอร์เดียวกัน ในขณะที่ .NET ทำได้โดยตรง แต่ Java ต้องเลี่ยงไป Native นั่นผมไม่เรียกว่าช่องทางครับ ผมเรียกว่าเลี่ยงบาลี ไหนโม้นักหนาว่า มันจะเร็วแค่ไหนขึ้นอยู่กับความฉลาดของ Virtual Machine? สุดท้ายก็ต้องโยนเอาความเร็วไปวิ่ง Native แล้วที่โวยวายแทบตายว่า DALVIK ไม่ใช่ปัญหานั่นมันคืออะไร?

ก็ถึงได้เรียกว่า Virtual Machine อวดฉลาด สุดท้ายก็ต้องโยกไปใช้ Native ผ่าน JNI แต่พอถามถึงทีไรก็โม้ตลอดว่า Java เร็วส์

By: rromk
AndroidUbuntu
on 8 December 2011 - 01:15 #361780 Reply to:361742

สรุปว่าปัญหาของคุณคือแค่ไม่มี struct ให้ใช้ใน java ใช่ไหมครับ ก็เลยจะเป็นจะตายเอา? แน่นอนว่าการมี struct ทำให้เขียนโปรแกรมให้เข้าใจได้ "ง่ายขึ้น" สำหรับคนที่ตีกรอบไว้แล้วว่าต้องการจะใช้ struct แต่กลับกันก็เมื่อรู้อยู่แล้วว่าภาษามันไม่มีให้ใช้ ก็ต้องไปหาทางแก้ปัญหาเดิมโดยที่ไม่ต้องใช้ struct สิครับ

เอาง่ายๆ native opcode มันมี struct ไหม? ท้ายที่สุดแล้ว C มันก็ต้อง compile ออกมาเป็นภาษาเครื่อง (native opcode) อยู่ดี แล้วทำไมมันทำงานได้ครับ?

By: Thaina
Windows
on 8 December 2011 - 02:45 #361804 Reply to:361780

แล้ว Java มีปัญญาเขียน Native OpCode ในรูปแบบเดียวกับที่ C หรือ C# เขียน struct แล้วคอมไพล์ออกมาเป็น OpCode แพทเทิร์นนั้นได้มั้ย? นี่แหละคือประเด็นว่าทำไม C หรือ C++ และ C# มี struct ให้ใช้ การที่มันเขียน struct ลงไป ก็ทำให้การ compile ออกมาเป็น OpCode แพทเทิร์นที่ Optimize ได้

นั่นคือสิ่งคน Java ฝันว่า JVM มันจะทำได้อัตโนมัติ แต่ความจริงคือรอไปชาติหน้าก็อาจจะยังทำไม่ได้ ในขณะที่ C# ทำได้เพราะปล่อยให้โปรแกรมเมอร์เลือกเอง

ถ้าหากว่า Java มีวิธีพลิกแพลงแก้ปัญหาให้เขียนโปรแกรม Simulation หรือ Graphic แบบ High Performance ได้ คงมีเกม 3D เน้นกราฟฟิค ทำด้วย Java เกร่อเต็มตลาดไปนานแล้วครับ (C# ยังพอมี)

ไอ้คำว่าภาษาไม่มีให้ใช้นั่นแหละประเด็น ทำไมภาษามันถึงต้องไม่ให้ใช้ล่ะ ทั้งๆที่จะทำมันก็ทำได้ ในขณะที่ภาษาอื่นเขามีให้ใช้ และทำไมพวกคุณต้องมาคอยแก้ตัวให้ภาษานี้ การที่ไม่มีฟีเจอร์ที่เขาใช้งานจริงมันควรจะถือเป็นจุดด้อยที่ควรแก้ไข ไม่ใช่แก้ตัวไปเรื่อยๆ

และนี่คือจุดที่ทำให้ผมเรียก Java ว่าอวดฉลาด มันต่างกันตั้งแต่พื้นฐานแล้วว่า Java อวดฉลาดไปหมดทุกอย่าง ไอ้นั่นก็ไม่ต้อง ไอ้นี่ก็ไม่ต้อง JVM เทพ ไม่ต้องห่วงปัญหา Performance แต่พอต้องใช้จริงๆกลับไม่มีปัญญาทำอะไรหลายอย่างอยากที่โปรแกรมเมอร์อยากให้มันเป็น สุดท้าย Performance ก็ไม่ถึงขั้น

ในขณะที่ C# .NET มีให้ใช้เท่าที่ Java มี แต่ยอมรับว่าตัวเองโง่ ไม่อวดฉลาดว่า ตัวข้าทำเองได้ โปรแกรมเมอร์ไม่ต้องยุ่ง แบบที่ Java ชอบทำ ก็เพิ่มฟีเจอร์ให้เลือกใช้ จะใช้ไม่ใช้ก็ได้แต่ถ้ารู้จักใช้ก็จะมีประโยชน์ ทำงานออกมาได้โปรแกรมที่มีประสิทธิภาพมากขึ้นได้

และอย่าลืมว่า JNI มันไม่ใช่ใช้ได้ทุกที่ ในขณะที่ struct เป็นของธรรมดาใน .NET คิดจะใช้ JNI แล้วพอร์ทไม่ได้ทุกที่ ที่โม้นักหนาว่า Run Anywhere ล่ะ?

สุดท้าย

คุณอย่าลืมว่าที่มาเถียงคนอื่นอยู่นี่เพราะตัวเองโม้ว่า DALVIK มันเจ๋งเมพ ประสิทธิภาพสูง Java เร็วส์ พอไล่เข้าจริงๆก็หนีไปอ้าง JNI แล้วมันเกี่ยวกับ DALVIK ตรงไหน? ไหนว่า DALVIK มัน MegaClever ฉลาดสุดๆ สามารถ Generate Code ออกมาได้มี Performance สูงสุดเทียบเท่า Native และ Garbage Collector ก็มีประสิทธิภาพ แล้วทำไมยังต้องพึ่ง JNI อีก?

By: rromk
AndroidUbuntu
on 8 December 2011 - 08:32 #361845 Reply to:361804

อย่าพูดชุ่ยๆสิครับ ทำไมเอาสิ่งที่ผมไม่ได้พูดมายัดใส่ปากผมอย่างงี้ล่ะ? ผมไปบอกคุณตอนไหนว่า dalvik มันเจ๋งเทพ มันเร็วกว่าใคร มันฉลาด megaclever ไม่มีใครเหมือน? กลับไปอ่านดูก่อนไหมครับ?

แน่นอนมันไม่ได้เจ๋งเทพ แต่มันก็ไม่ได้ห่วยโคดๆแบบที่คุณว่าหรอกครับ แล้วก็ยังมีการพัฒนามาอย่างต่อเนื่อง app ที่เคยเขียนให้รันใน android เวอร์ชันเก่าๆ เมื่อมารันบน android เวอร์ชันใหม่ๆ แม้จะเป็นฮาร์ดแวร์เดิม มันก็เร็วขึ้น สิ่งเหล่านี้มันเกิดขึ้นได้จากการเขียน native code ไหมครับ?

JNI เป็นสิ่งจำเป็น เหตุผลสำคัญเป็นเพราะว่า java มันติดต่อ hardware โดยตรงไม่ได้ และอีกอย่างการที่มันมี JNI ยังไม่เป็นการบอกอีกหรือว่ามันไม่ได้ "อวดฉลาด"

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 11 December 2011 - 22:42 #363153 Reply to:361845
PaPaSEK's picture

ยังไงๆ ผมก็ยืนยันว่า Bytecode ห่วยกว่า Native แน่นอนครับ

ถ้าจะหักล้าง คงต้องทำให้ App ของ Android กับ Java มันเร็วเท่าๆ กับ Native app ให้ผมเห็นนะครับ

แต่พอดีผมยังไม่เคยเห็นว่า Bytecode ตัวไหนนอกจาก .NET ที่มันจะเร็วพอๆ กับ Native น่ะครับ

ถ้าพิสูจน์ให้คนทั้งโลกเห็นไม่ได้ ผมก็ยังจะบอกว่า Java เร็วส์ ตามเดิมครับ

By: lengzat on 6 December 2011 - 22:38 #361120

บอกได้ร้อยแปดว่าทำไมมันไม่ลื่น แต่สรุปแล้วก็ไม่สามารถทำให้มันลื่นได้

แล้วจะบอกเพื่อ ?

หรือว่าจะได้ให้รู้ว่า มันไม่มีวันจะลื่นได้ เพราะเหตุผลร้อยแปดที่บอกมา

By: superballsj2
iPhoneWindowsIn Love
on 7 December 2011 - 10:31 #361346 Reply to:361120
superballsj2's picture

จงยอมรับ และอยู่กับมัน

By: xxa
Android
on 6 December 2011 - 22:43 #361121

เสียงจากนักศึกษาฝึกงาน Follow up to “Android graphics true facts”, or The Reason Android is Laggy

By: thegodth
AndroidRed HatUbuntuWindows
on 6 December 2011 - 22:40 #361122

ผมอยากให้เขามาอธิบายบ้างว่าทำไมแอนด๋อยถึงสูบแบตมากกว่า ios

By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 6 December 2011 - 23:05 #361142 Reply to:361122
UltimaWeapon's picture

เพราะมันใช้พลัง CPU มากกว่าคับ และ CPU วิ่งที่เต็มความเร็ว ไม่เหมือน iPhone ที่ Under clock ลงมา

By: nolykk
ContributoriPhoneAndroidUbuntu
on 6 December 2011 - 23:59 #361174 Reply to:361142
nolykk's picture

อยากให้กูเกิลพัฒนาอัลกอริทึมให้ทัดเทียม ios ไม่ต้องใช้ clock ไวสุดๆ ก็ทำงานได้ไวได้เหมือนกัน บางอย่างมันช้ากว่าขนาดน่าเกลียด แบบ export clip 1080p

ยกเว้นตวเลข cpu เป็นจุดขายของโทรศัพท์ทุกวันนี้ไปแล้ว ไม่ใช่ว่าใช้จริงเร็ว ลื่นขนาดไหน

สุดท้ายก็ kill ALL the process !!


twitter.com/djnoly

By: UltimaWeapon
Windows PhoneRed HatWindowsIn Love
on 7 December 2011 - 02:43 #361263 Reply to:361174
UltimaWeapon's picture

ปัญหาหลักตอนนี้มันไม่ได้อยู่ตรงนั้นคับ แต่มันอยู่ที่ Virtual Machine vs Native

By: mr_tawan
ContributoriPhoneAndroidWindows
on 6 December 2011 - 22:41 #361124
mr_tawan's picture

มีคนที่อ้างตัวว่าเคยเป็นเด็กฝึกงานของ Google (แต่ตอนนี้ฝึกงานอยู่ Microsoft) บอกว่า เหตุผลที่มันไม่ลื่นเพราะ Android วาด UI Element บน Main Thread แทนที่จะมี UI Thread แยกออกมาเหมือน Mobile OS อื่น ๆ

ส่วนตัวผมไม่ค่อยเชื่อเท่าไหร่ เพราะ OS เก่า ๆ เขาก็วาดบน Main Thread กัน ก็ไม่เห็นกระตุกหนักมากเลย (โดยเฉพาะ Windows 555) แต่อาจจะจริงก็ได้ ใครจะไปรู้


  • 9tawan.net บล็อกส่วนตัวฮับ
By: BLiNDiNG
AndroidUbuntuWindowsIn Love
on 6 December 2011 - 23:25 #361155 Reply to:361124
BLiNDiNG's picture

หืมมมม ที่เค้าพูดมาก็ฟังดูมีเหตุผลเหมือนกันนะ (ถ้าเป็นแบบนั้นจริง)

เรื่อง priority ของ Thread ที่ render graphic ว่าของ iOS จะเป็น high แย่งทรัพยากรอันอื่นได้ หยุด process อื่นๆไว้ก่อน graphic มาก่อนเท่านั้น

แต่ของ android เป็น normal แล้วทำพร้อมๆกับอันอื่น(จับปลาสองมือ?) เลยไม่ลื่นเท่า iOS

By: mr_tawan
ContributoriPhoneAndroidWindows
on 6 December 2011 - 23:47 #361163 Reply to:361155
mr_tawan's picture

คือ ผมเห็น Windows เองเนี่ยก็มีหลาย ๆ โปรแกรมที่มีงานที่ทำงานอยู่บน UI Thread (ซึ่งเอาเข้าจริง ๆ มันก็คือ Main Thread แหละ) แต่เราเองก็ยังเห็นอาการอืดระดับ Mouse กระตุกอยู่น้อยมาก (เคยเห็นบ้างแต่ไม่เยอะ ส่วนใหญ่ก็คือตอน CPU กินไป 100%) ถึงโปรแกรมจะค้างไปเลยก็เถอะ 555 คิดว่าตรงนี้ควรยกความดีความชอบให้ Thread Scheduler น่ะครับ

ถ้าเป็นอย่างที่เค้าว่าจริง ๆ วิธีแก้ก็คงเป็นออก Programming Model ใหม่ ให้โยกเอา Logic ทั้งหมดแยกไปอีก Thread ไปเลย แล้วก็เช็คเอาว่าเป็น Model ใหม่หรือเปล่า ถ้าใช่ก็ยกระดับความสำคัญของ Thread ขึ้นเป็น Real-time (ถ้าไม่ก็ทำตามวิธีปรกติไป)


  • 9tawan.net บล็อกส่วนตัวฮับ
By: azezel
AndroidUbuntuWindowsIn Love
on 6 December 2011 - 22:45 #361127

สรุปสั้นๆ ณ เวลานี้ นี่คือเหตุผลที่ Android ยังไม่ลื่นเท่า iOS
ส่วนในอนาคตก็ยังไม่มีใครรู้

By: salapao
iPhoneWindows PhoneUbuntu
on 6 December 2011 - 23:06 #361143 Reply to:361127
salapao's picture

เห็น IOS มันลื่นหัวแตก มาตั้งแต่เกิด

By: GooEng
ContributorWindows PhoneAndroidUbuntu
on 6 December 2011 - 23:54 #361172 Reply to:361143
GooEng's picture

WP7.5 ก็ลื่นหัวแตก ของผมตกพื้นไปแล้วรอบนึง ลื่นมากกก


คำตอบของข้า คือ ประกาศิต

By: dq-pb
AndroidWindows
on 7 December 2011 - 00:18 #361186 Reply to:361172

เคยลองเล่น HD7 อยู่ซักแป้ป รู้สึกว่ามันเร็วกว่า iOS จริงๆ

By: TeamKiller
ContributoriPhone
on 7 December 2011 - 00:39 #361198 Reply to:361172
TeamKiller's picture

เพื่อนผม ไม่ต้องแมงโก้เลย เดิมๆ 7.0 ก็ลื่นเหมือนกันนะครับ

ซื้อมาไม่กี่วันลื่นหล่นตกบันได เลย

By: saimon_xcite
iPhoneAndroidBlackberryWindows
on 7 December 2011 - 13:45 #361433 Reply to:361198

ต้องขึ้นต้นด้วย

"A: วันก่อนครับ"

ด้วยหรือเปล่าครับ

By: danai1920
iPhoneWindows PhoneAndroidBlackberry
on 7 December 2011 - 19:19 #361597 Reply to:361433

+1 อิอิ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 7 December 2011 - 00:33 #361191 Reply to:361143
mr_tawan's picture

iPod Touch (Gen1) ของผมไม่ได้ลื่นมากนะครับ คือก็ลื่นแบบไม่กระตุก แต่ก็ไม่ได้เร็วชนะเลิศอะไร


  • 9tawan.net บล็อกส่วนตัวฮับ
By: somsak_sr
ContributorAndroidUbuntu
on 6 December 2011 - 22:47 #361129
somsak_sr's picture

ชื่อสกุลเท่มากครับ Hackborn
สงสัยเกิดมาเพื่องานสายนี้โดยเฉพาะ

By: Job_The_Gamer
WriterWindows PhoneAndroidWindows
on 8 December 2011 - 12:51 #362000 Reply to:361129
Job_The_Gamer's picture

นั่งอ่านมาหลาย Comment เพิ่งเจอคนที่คิดเหมือนกัน 555


Achievement Unlocked: Being a Blognone's Writer

By: PhompAng
AndroidSUSEUbuntuWindows
on 6 December 2011 - 22:56 #361135

ต้องหยอดน้ำมันถึงจะลื่น โดนตบ

By: buzdesign on 6 December 2011 - 23:12 #361147

แล้ว....แก้ยังอะ สรุปคือแก้ได้แล้ว หรือ ไม่ได้ 5555

By: altimate
ContributoriPhone
on 6 December 2011 - 23:15 #361148
altimate's picture

"When you're the janitor, reasons matter," Jobs tells newly minted VPs, according to Lashinsky.

"Somewhere between the janitor and the CEO, reasons stop mattering," says Jobs, adding, that Rubicon is "crossed when you become a VP."

By: Peace
Contributor
on 6 December 2011 - 23:49 #361166

ปัญหาจริงๆน่าจะอยู่ที่ render architecture ของ android เองด้วยครับ จริงๆ เราสามารถถกกันได้ดีกว่านี้ถ้าเรามีข้อมูล render architecture ของ android แบบละเอียด

By: TeamKiller
ContributoriPhone
on 6 December 2011 - 23:56 #361173
TeamKiller's picture

จะมีตอนต่อเปล่าหว่า ว่าทำไม iOS , Windows Phone ถึงลื่น

By: dq-pb
AndroidWindows
on 7 December 2011 - 00:16 #361183

ส่วนมากก็เห็นคนใช้แอนดรอย์ดบอกว่าลื่นกว่า iOS ทั้งนั้นนิหว่า ชักงงๆ

By: Go-Kung
iPhoneWindows PhoneAndroidBlackberry
on 7 December 2011 - 00:19 #361187 Reply to:361183

ส่วนใหญ่ก็จะเป็น Custom ROM ที่โมฯมาไม่มากก็น้อยแหละครับ

Official ของค่ายที่ทำดีๆอย่าง HTC , SE ก็ยังมีหน่วงๆเป็นบางจังหวะให้เห็นชัดเจนกว่า iOS

ส่วนฝั่ง iOS ก็จะบอกว่า เอ็งใช้ CPU แรงกว่านี่

(เพราะตัวเทียบในปัจจุบันคือ 2 Core vs. 1 Core)

ป.ล. ยังไม่นับ 4S ครับ เพราะยังไม่แพร่หลาย

By: Zenyai
iPhoneAndroidBlackberryWindows
on 7 December 2011 - 01:23 #361221

ลื่นจะตาย (Rom XDA) มีแต่ market ตัวใหม่ อืดมาก

By: Meow-Meow
ContributoriPhoneWindows PhoneAndroid
on 7 December 2011 - 11:03 #361365 Reply to:361221
Meow-Meow's picture

+100 ชอบที่มันสวย แต่เกลียดตรงมันอืด


Destination host unreachable!!!

By: lamoon
Android
on 7 December 2011 - 01:26 #361222

ลื่นไม่ลื่นมันอยู่ที่ใจ :P

By: pd2002 on 7 December 2011 - 01:34 #361226

ผมใช้ Galaxy Nexus มาสองวันแล้ว มันลื่นมากจริงๆ เท่ากับ iOS เลยครับ
เครื่องก่อนหน้านี้ไม่ต้องพูดถึง กระตุกกันเป็นนิจ
ปล.ผมใช้ iPhone4 คู่กันด้วยนะครับ

By: Not Available a...
ContributoriPhoneAndroidWindows
on 7 December 2011 - 05:07 #361285
Not Available at this Moment's picture

คนทั่วไปไม่มีใครอยากรู้หรอกว่าทำไมมันถึงไม่ลื่น คำตอบที่ให้มานี่ไม่ช่วยให้อะไรดีขึ้นมาเลย แถมยังย้ำแผลเดิมหนักกว่าเก่าว่าทั้งๆที่รู้แต่ก็ยังไม่มีปัญญาแก้ปัญหาอีกด้วยซ้ำไป

เค้าอยากได้คำตอบว่าเมื่อไหร่มันจะลื่นมากกว่า (เอ้ะ หรือจะเป็น มันจะลื่นได้มั้ย) ต่างหากล่ะ!


ชื่อ : Not Available at this Moment (N/A)

By: paween_a
Android
on 7 December 2011 - 11:14 #361379 Reply to:361285
paween_a's picture

+1

By: lancaster
Contributor
on 7 December 2011 - 06:07 #361291

กูเกิลควรทำ home screen ที่เป็นภาพ prerender เหมือน ios ออกมาบ้างนะ ถึงจะทำไรไม่ได้เลยนอกจากวางไอค่อน แต่มันก็ลื่นเหมาะกับการโชว์

By: manster
iPhoneAndroidUbuntuWindows
on 7 December 2011 - 09:22 #361321 Reply to:361291
manster's picture

5 5 5 เห็นภาพเลย

By: F16
iPhoneWindows PhoneAndroidIn Love
on 7 December 2011 - 07:12 #361299

หายสงสัยละทำไม hardware แร๊งแรง แต่ทำไมเลื่อนๆละมันกระตุกๆนิดๆ

ใช้ iPhone ต่อไป กี่รุ่นๆก็ลื่นไม่มีกระตุกให้ขัดใจ ^^

By: btxxxx
AndroidWindows
on 7 December 2011 - 09:17 #361319

เกี่ยวกับ android มีพวก Widget ต่าง ๆ และ Process เบื้องหลังที่ทำงานพร้อม ๆ กันเยอะกว่า iPhone หรือเปล่า? ของ iPhone ผมเปิดดูไม่เป็น แต่เห็นว่าของ Android มันเยอะมาก (คือสงสัยว่างานอย่างเดียวกันแต่ Android อาจใช้ Process ที่ซับซ้อนกว่า หรือใช้ทรัพยากรมากกว่า)

มีผิดตรง

hardware acceleration ไม่ได้มีแต่ข้อดีเสมอไป เพราะโพรเซสของแอพจะต้องเปลืองแรมอีก 8MB ต่อโพรเซสสำหรับเรียกใช้ OpenGL ดังนั้นงานบางงานในตัวระบบปฏิบัติการ Android 4.0 จึงเลือกจะไม่ใช่ hardware acceleration เพื่อประหยัดแรม โดยเฉพาะงานที่เพียงซีพียูลำพังสามารถทำได้ดีอยู่แล้ว (เช่น ไม่ควรจะเรนเดอร์ status bar ด้วย OpenGL เพราะไม่คุ้ม)

By: Not Available a...
ContributoriPhoneAndroidWindows
on 7 December 2011 - 13:43 #361431 Reply to:361319
Not Available at this Moment's picture

iOS4 ผมมีประมาณ 30 Procress เวลาไม่เปิด App ใดๆเลยครับ


ชื่อ : Not Available at this Moment (N/A)

By: lancaster
Contributor
on 7 December 2011 - 13:50 #361437 Reply to:361431

ไม่เกี่ยวครับ อันนั้นเป็นพวก system service

ที่ช้าจริงๆคือแอพที่รันเป็น service แล้วเขียนห่วยๆนี่แหละตัวปัญหา

By: btxxxx
AndroidWindows
on 7 December 2011 - 13:59 #361440 Reply to:361437

ผมว่าอาจจะเกี่ยวเหมือนกันนะ เพราะถึงจะเป็น System service แต่ถ้ามันเขียนห่วยเหมือนกัน ก็อาจจะเป็นปัญหาได้หรือเปล่า?

จริง ๆ ปัญหานี้อาจจะเป็นเพราะ... คนใช้ iphone นิ้วมันกว่าเลยทำให้ลื่นกว่าก็ได้ :P

By: lancaster
Contributor
on 7 December 2011 - 14:09 #361443 Reply to:361440

ปกติ system service ก็เขียนมาดีนะครับ อ้อ ยกเว้น home screen ของผู้ผลิตแต่ละห้อที่ขยันกันยัดเข้ามา อย่างเช่น touchwiz ตัวแรก ห่วยบรม

แต่ที่คุณ NA ว่ามาน่าจะหมายถึงตอนรันคำสั่ง ps มากกว่าครับ ซึ่งพวกนั้นเอามาวัดไม่ได้ครับ เพราะมันมีเยอะแยะตั้งแต่ init ยัน filesystem เลย แถมแต่ละตัวก็ไม่ค่อยได้ทำงานเท่าไหร่ครับ

ที่แน่ๆ ios มันลื่นกว่าชัวร์ เพราะนอกจากของ apple เองหรือที่ผ่านการตรวจสอบแล้ว app อื่นๆไม่สามารถรันเป็น background service ครับ อย่าว่าแต่ background service เลยครับ แค่จะสลับหน้าต่าง multitask ยังโดน freeze เลย ไม่ได้เป็น multitask จริงๆสักนิด

By: btxxxx
AndroidWindows
on 7 December 2011 - 14:13 #361447 Reply to:361443

ชื่อเล่นน่ารักดีครับ NA (นา) ชื่อเต็มมันยาว :)

ย่อหน้าล่างที่ว่าผมก็คิดว่าน่าจะเกี่ยวเหมือนกัน

By: Not Available a...
ContributoriPhoneAndroidWindows
on 7 December 2011 - 19:32 #361600 Reply to:361447
Not Available at this Moment's picture

N/A ก็ยังดีนะ สั้นเกิ้นนน --"


ชื่อ : Not Available at this Moment (N/A)

By: paween_a
Android
on 7 December 2011 - 11:17 #361380
paween_a's picture

ผู้ใช้เขาไม่ได้อยากรู้หรอกว่าเพราะอะไรถึงไม่ลื่น จงไปแก้มาให้มันลื่นซะ ทำไม iOS มันทำได้

By: mk
FounderAndroid
on 7 December 2011 - 13:44 #361432 Reply to:361380
mk's picture

Blognone ไม่ใช่เว็บสำหรับผู้ใช้ทั่วไปนะครับ อยู่ผิดเว็บหรือเปล่า?

By: bahamutkung
ContributorAndroidWindowsIn Love
on 7 December 2011 - 14:34 #361448 Reply to:361432
bahamutkung's picture

แรงส์!


"With the first link, the chain is forged. The first speech censured, the first thought forbidden, the first freedom denied, chains us all irrevocably."

By: danai1920
iPhoneWindows PhoneAndroidBlackberry
on 7 December 2011 - 19:26 #361598 Reply to:361448

+1 T^T

By: paween_a
Android
on 18 December 2011 - 08:09 #365444 Reply to:361432
paween_a's picture

ตอนแรกไม่มั่นใจครับ แต่ตอนนี้คิดว่าใช่แล้ว ที่นี่น่าจะเป็นโรงเรียนมัธยมแห่งหนึ่ง เพราะเห็นคนแถวนี้ชอบเอาชนะความเกรียนด้วยความเกรียนกว่าเสมอ ๆ

By: McKay
ContributorAndroidWindowsIn Love
on 18 December 2011 - 10:04 #365451 Reply to:365444
McKay's picture

x


Russia is just nazi who accuse the others for being nazi.
someone once said : ผมก็ด่าของผมอยู่นะ :)

By: superballsj2
iPhoneWindowsIn Love
on 19 December 2011 - 09:35 #365798 Reply to:365444
superballsj2's picture

Android Fanboy เริ่มเข้าใกล้สาวกแอปเปิ้ลเข้าไปทุกวันแล้ว แตะต้องมิได้เลย

By: dokapom
SUSE
on 8 December 2011 - 02:35 #361812 Reply to:361380

OS ขั้นเทพ Hardware ขั้นเทพ จับต้องควรระวัง

By: DashoIISO
ContributorWindows PhoneAndroidWindows
on 7 December 2011 - 12:13 #361394
DashoIISO's picture

Android เล่นทำ หน้า Home แถมยังกดปุ่มให้เข้าไป Menu App ไว้อีก ก็ประมวลผลไป 2 ชั้น
แถมยังมี Widget / Shortcut นู้นนี่เยอะแยะ มีตัว Launcher ให้ประมวล หนักๆ - -*
ลืม Noticifation bar

ส่วนพวก iOS / WP7 / Meego 1.2 Harmattan มันลื่นๆ เพราะ ไม่ได้ซับซ้อนแบบ Android

ถ้าอยากเห็น Android ที่ลื่นๆ ลองดู Rom MIUI เค้าทำเป็นสไตล์ iOS เรียบๆ ง่ายๆ ไม่มีการกดเข้า Menu นู้นนี่
เลยทำให้มันลื่น (แต่เพราะไม่มีนี่แหละ มันเลยเหมือนไม่ใช่ Android)

OS แต่ละตัวก็มีเสน่ห์ของมันครับ

Android มันยืดหยุ่นดี ปรับเปลี่ยนได้ตามใจ แต่ความลื่นก็ขึ้นอยู่กับงบของเรา ได้เครื่องแรง ก็ใช้ OS ได้คุ้ม ยิ่งได้เห็น ICS ยิ่งดูดีขึ้นเยอะ ล้ำมาก

WP7 ก็แหวกแนว UI ลื่นดี เพราะมีแค่แท่ง 4 เหลี่ยมเลื่อนไปมา (ใช้ๆ ไปเบื่อเพราะมันปรับเปลี่ยนอะไรไม่ได้เลย -*-)

iOS ก็ดีที่ปรับเปลี่ยน Wallpaper รูปแบบหน้าจอ ต่างๆ UI ยังลื่นหัวแตก ยังไงก็ยกให้เค้าเป็นที่ 1 ทำทุกอย่างออกมาได้สวยงาม ตั้งแต่ Version แรกยันล่าสุด ยังไงก็ยังเหมือนเดิม (แถมยังเป็นที่รักของชาวโลก 555)

Meego 1.2 Harmattan ก็คล้าย iOS ผสมกับ WP7 เลย เรียบง่าย Meego 1.2 ได้แสดงให้เห็นว่า แม้ Spec เครื่องจะกาก แต่ก็ไม่มีหน่วงเลย Touch ได้ติดมือ แถมยังเด่นที่ MultiTasking ของเค้าดี (ตอนนี้ผมหยุดอยู่ที่ N9 ^^)

Meego ตัวธรรมดา เหมือนลอก Android กับ Symbian มาชัดๆ (อย่าพูดถึงเลย ตายไปแล้ว)

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 7 December 2011 - 15:07 #361463 Reply to:361394

จริงๆ Live tiles ของ WP7 นี่ก็ดูไม่ต่างกับ Widget ของแอนดรอยด์มากนะครับ มันก็ปักอะไรลงไปได้ แล้วก็ทำงานดึงข้อมูลอะไรออกมาแสดงได้เหมือนกัน จริงๆมันก็เป็น Widget แบบสี่เหลี่ยม กินพื้นที่ช่องหรือสองช่อง แบบแอนดรอยด์นั่นแหละครับ

เมนูก็ต้องกดเข้าไปอีกขั้นเหมือนแอนดรอยด์


By: bukindepsbbl
Windows Phone
on 7 December 2011 - 15:59 #361496 Reply to:361394
bukindepsbbl's picture

แค่อยากจะบอกว่า แท่งๆ ในหน้าจอหลักของ WP7 นั้นมันทำหน้าที่ทั้ง widget และ Notification ครับ ซึ่งมัน real time มากทีเดียว ดู FB จาก People hub ได้ทันที chat (FB,MSN,SMS) โดยไม่ต้องลงไรเพิ่มเลย

ที่ขัดใจตอนนี้ ผมว่าภาษาไทย

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 7 December 2011 - 16:17 #361504 Reply to:361496

+1 ภาษาไทยโอเคเมื่อไหร่ ผมสอยทันทีเลย


By: Hilcrhyme
iPhoneWindows PhoneAndroidBlackberry
on 7 December 2011 - 16:28 #361509 Reply to:361504

ผมรอwp7ตัวที่รัน mkv ได้

By: xxxooo
Windows PhoneWindowsIn Love
on 8 December 2011 - 01:35 #361788 Reply to:361509

คงไม่มีวันแล้วหล่ะครับ

เพราะ ทุกโปรแกรมที่ต้องการเล่น Music or Video ต้องเล่นผ่าน Zune ซึ่ง Zune ก็ทำงายได้แค่ WMV กับ MP4 ผ่าน DXVA อีกต่อนึง

ดูจาก โครงสร้างแล้ว ยากครับ สำหรับ Code แบบอื่น

ไม่ต้องรอแล้วครับ ซื้อเลย

Microsoft มีโปรแกรมสำหรับ Convert Video คือ Microsoft Expression Encoder 4 SP1 ซึ่งใช้ได้ฟรี ไฟล์เล็ก ภาพชัด แต่ ความยาว ไม่เกิน 10 นาที ถ้าอยากได้นานกว่านั้น ต้องเสียเงิน

By: JPorsh
iPhoneWindowsIn Love
on 16 December 2011 - 13:28 #364971
JPorsh's picture

ดราม่า