อะไรทำให้ผลิตภัณฑ์ซอฟต์แวร์ที่มีขนาดใหญ่และซับซ้อนช้า [ปิด]


16

ด้วยเหตุผลที่ไม่เกี่ยวข้องส่วนใหญ่ฉันติดตั้ง Delphi 7 อีกครั้งในเวลานาน ฉันต้องบอกว่าฉันปลิวไปหมดแล้ว - ในแบบที่ฉันไม่เคยทำมานานแล้ว นี่ไม่ใช่วิธีที่ฉันจำสิ่งต่าง ๆ ได้เลย การติดตั้งใช้เวลาประมาณ 30 วินาที การเปิดตัวใช้เวลา 2 วินาทีและสามารถใช้งานได้ทันที ฉันสามารถกด "เรียกใช้" ครั้งที่สองหลังจากที่เริ่มต้นและน้อยกว่าหนึ่งวินาทีหลังจากนั้นโปรแกรมว่างจะปรากฏขึ้นและทำงานอยู่ Hurray สำหรับคอมพิวเตอร์เริ่มเร็วขึ้นมาก!

แต่เหตุผลที่ฉันถูกปลิวไปอย่างนี้ก็เพราะว่าฉันมักจะใช้ Visual Studio 2010 ซึ่งก็ไม่ทำให้รู้สึกแย่แบบนี้เลย จริงอยู่ที่ Delphi 7 เป็นระบบที่เล็กกว่า Visual Studio 2010 มาก แต่มันมีลักษณะของการมีสิ่งที่จำเป็นจริงๆที่นั่น: palette control, design form, ตัวแก้ไขโค้ดพร้อมโค้ดที่สมบูรณ์ ฉันรู้ว่าภาษาอาจจะง่ายกว่าและการทำให้โค้ดสมบูรณ์อาจมีประสิทธิภาพน้อยกว่าและ IDE อาจจะไม่สามารถขยายได้และมีคุณสมบัติที่หลากหลาย แต่ก็ยัง: ฉันไม่เข้าใจว่า (เช่นผ่านกลไกใด) คุณสมบัติพิเศษมากมาย (ที่ฉันอาจยังไม่ได้เรียก) ทำให้ระบบเช่น Visual Studio รู้สึกเฉื่อยชาในการเปรียบเทียบเสมอ

ฉันอยากจะขอให้คนที่มีประสบการณ์ในการทำงานกับระบบในระดับ Visual Studio: อะไรที่ทำให้พวกเขาช้า? มันเป็นชั้น ๆ บนเลเยอร์ของ abstractions ที่จำเป็นในการรักษา codebase ให้อยู่ในขีดความสามารถของมนุษย์หรือไม่? เป็นจำนวนรหัสที่ต้องใช้ในการทำงานหรือไม่ มันเป็นแนวโน้มที่ทันสมัยต่อวิธีการประหยัดเวลาโปรแกรมเมอร์ที่ค่าใช้จ่าย (เหลือเชื่อใหญ่) ในรอบนาฬิกา / แผนกการใช้หน่วยความจำ?


7
ง่าย ๆ : เมื่อมวลเพิ่มขึ้นจำเป็นต้องใช้แรงมากขึ้นในการเอาชนะความเฉื่อย
Shog9

มีคนเคยบอกผู้จัดการกับฉัน แต่ฉันไม่เชื่อเลย
MIchael Grassman

1
นี่เป็นเหตุผลส่วนใหญ่ที่ฉันยังคงใช้ D7 เป็นหลักในการเขียนโปรแกรม Delphi
GrandmasterB

รหัสที่เร็วที่สุดคือสิ่งที่ไม่เคยถูกเรียกใช้
Henry

4
@romkyns: ฉันพบซอฟต์แวร์จำนวนมากในยุคสมัยใหม่มักจะป่องอย่างไม่น่าเชื่อที่มีขนาดใหญ่โดยไม่จำเป็นและเทอะทะ ซอฟต์แวร์จำนวนมากในขณะนี้สามารถแก้ไขปัญหาเดียวกับที่ได้รับการแก้ไขเมื่อสิบถึงยี่สิบปีที่แล้วโดยใช้พลังงานและพื้นที่เพียงเล็กน้อย ทำไมมันถึงล่าช้าเหมือนอย่างที่เคยทำถ้าไม่มากไปกว่านั้น? ความไร้ประสิทธิภาพและการขยายตัว
Orbling

คำตอบ:


20

วิทยาศาสตร์ดาราศาสตร์

Visual Studio 2010 สร้างขึ้นบนพื้นฐานการนำเสนอ Windows ดูคลาสของปุ่มสำหรับ WPF มันเป็นลูกคนที่ 9 ของคลาสเบส มีคุณสมบัติวิธีการและเหตุการณ์ประมาณ 5 หน้า เบื้องหลังมีคำจำกัดความลักษณะอีกห้าหน้าที่อธิบายมุมโค้งมนที่สวยงามและการเคลื่อนไหวของภาพเคลื่อนไหวที่ละเอียดอ่อนเมื่อเคอร์เซอร์ของเมาส์เลื่อนไปมา ทั้งหมดนี้ใช้สำหรับบางสิ่งที่แสดงข้อความหรือรูปภาพและสร้างเหตุการณ์คลิกเมื่อตรวจพบว่าปุ่มเมาส์หยุดทำงาน

หยุดโปรแกรมเช่น Visual Studio ที่จุดสุ่มใด ๆ ดูที่การติดตามสแต็ก โอกาสดีมากที่คุณอยู่ลึกลงไป 20 ระดับในการเรียกสแต็กและโหลด DLLs ห้าตัวเพื่อไปที่นั่น

ตอนนี้เปรียบเทียบสองสิ่งนี้กับ Delphi ฉันพนันว่าคุณพบว่าปุ่ม Delphi มีคุณสมบัติวิธีการและกิจกรรมเพียง 20 รายการ ฉันพนันได้ว่า Delphi IDE มีสแต็กการติดตามลึกเพียง 5-7 ระดับเท่านั้น เพราะเมื่อคอมพิวเตอร์ช้าลงคุณไม่สามารถใช้โอเวอร์เฮดของ Visual Studio 2010 โดยที่ IDE ใช้เวลา 40 นาทีในการเริ่ม :-)

ดีกว่าอีกไหม? โดยทั่วไปฉันสามารถบอกโปรแกรม Delphi ได้เมื่อโหลดเพราะมันดูแบนสีจะถูกปิดเสียง (อาจเป็น 8 บิต?) และไม่มีการแรเงาหรือภาพเคลื่อนไหวที่บอบบาง วันนี้ฉันแค่รู้สึก 'ถูก' ราคาถูก แต่รวดเร็ว

เราดีกว่าไหม นั่นเป็นคำถามสำหรับนักปรัชญาไม่ใช่ผู้เขียนโคเดอร์


4
โปรแกรม delphi ดูไม่เรียบ ค่อนข้างโปรแกรมเมอร์โปรแกรมโปรแกรมดูเรียบ คุณสามารถสร้างอินเทอร์เฟซสีที่ดูดีทันสมัยพร้อม Delphi เช่นเดียวกับใน C # หรือ C ++
GrandmasterB

2
นี่คือคำตอบที่ลึกซึ้ง แต่ฉันไม่แน่ใจว่ามันจะเสร็จสมบูรณ์ Visual Studio 2008 (เวอร์ชั่นก่อนของปี 2010) ไม่มี WPF อยู่ในนั้นและยังคงเป็นโลกที่ช้ากว่า Delphi 7 คุณจะพูดในสิ่งเดียวกันเกี่ยวกับความลึกของสแตกการเรียกและจำนวน DLL ที่โหลดหรือไม่
Timwi

3
@ Timwi ใช่ฉันต้องการอย่างแน่นอน ประเด็นของฉันเกี่ยวกับความชั่วร้ายของ WPF น้อยกว่า (ฉันชอบ WPF จริง ๆ ) และอีกมากมายเกี่ยวกับวิธีที่เรามักจะเพิ่มเลเยอร์ตามเลเยอร์ของซอฟต์แวร์ที่เป็นนามธรรมเมื่อได้รับตัวเลือก บางที Visual Studio 2008 ไม่ได้มีค่าใช้จ่ายค่อนข้างมาก แต่ในขณะที่คุณตั้งข้อสังเกตว่ามีมากพอ :-)
เจบีเว่อร์

@ แกรนด์มาสเตอร์บีฉันไม่ได้ใช้เดลฟี่เพราะมันมาพร้อมกับสมมติฐานที่น้อยลงและห้องสมุดที่ง่ายขึ้น WPF ได้รับการออกแบบโดยสมมติว่าการเร่งความเร็วฮาร์ดแวร์ GPU จะอนุญาตให้โปรแกรมใช้สีที่ลึกกว่า, ภาพเคลื่อนไหวบ่อย, การผสมอัลฟา, เงาและอื่น ๆ Delphi ได้รับการออกแบบทางวิศวกรรมในเวลาที่สมมติฐานเหล่านี้ไม่สามารถทำได้ คุณสามารถนำสิ่งนี้ไปใช้ใน Delphi ได้หรือไม่? แน่นอน แต่คุณต้องใส่รหัสจำนวนมากเพื่อให้ได้พฤติกรรมของปุ่ม WPF ด้านบวกปุ่ม Delphi ไม่ได้มาพร้อมกับ CPU, หน่วยความจำและข้อกำหนดของ GPU ปุ่ม WPF มีอย่างใดอย่างหนึ่งซึ่งเป็นคำถามของ @ OP
Jay Beavers

10
อาร์กิวเมนต์ของคุณสำหรับ UI แบบธรรมดาและแบบแบนนั้นไม่ถูกต้องโดย UI 'Modern' ใหม่ของ Windows 10 ตอนนี้เรามีค่าใช้จ่ายทั้งหมดเพื่อสร้างปุ่มแบบแบนสี่เหลี่ยมจัตุรัสและธรรมดาเหมือนเมื่อ 30 ปีที่แล้ว
gbjbaanb

11

ฉันอยากจะขอให้คนที่มีประสบการณ์ในการทำงานกับระบบในระดับ Visual Studio: อะไรที่ทำให้พวกเขาช้า? มันเป็นชั้น ๆ บนเลเยอร์ของ abstractions ที่จำเป็นในการรักษา codebase ให้อยู่ในขีดความสามารถของมนุษย์หรือไม่? เป็นจำนวนรหัสที่ต้องใช้ในการทำงานหรือไม่ มันเป็นแนวโน้มที่ทันสมัยต่อวิธีการประหยัดเวลาโปรแกรมเมอร์ที่ค่าใช้จ่าย (เหลือเชื่อใหญ่) ในรอบนาฬิกา / แผนกการใช้หน่วยความจำ?

ฉันคิดว่าคุณคาดเดาจำนวนหนึ่งของพวกเขา แต่ฉันต้องการที่จะเสนอสิ่งที่ฉันคิดว่าเป็นปัจจัยที่ยิ่งใหญ่ที่สุดที่ได้ทำงานใน codebase ขนาดใหญ่พอสมควร (ไม่แน่ใจว่ามันใหญ่เท่า Visual Studio - หรือไม่ ประเภทและประมาณหนึ่งพันปลั๊กอิน) ประมาณ 10 ปีและสังเกตปรากฏการณ์เกิดขึ้น

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

การประสานงานและมรดกที่หลวม

สิ่งที่ฉันสังเกตคือการประสานงานที่หลวมและมรดกที่ยาวนานมีแนวโน้มที่จะนำไปสู่การสะสมของเสียจำนวนมาก

ตัวอย่างเช่นฉันพบโครงสร้างการเร่งความเร็วประมาณหนึ่งร้อยแห่งใน codebase นี้โดยส่วนใหญ่จะซ้ำซ้อนกัน

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

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

นอกจากนี้เนื่องจากความซ้ำซ้อนจึงมีเวลาน้อยที่จะเพิ่มประสิทธิภาพของพวกเขาด้วยป้ายราคาการบำรุงรักษาที่มาพร้อมกับที่และแม้ว่าเราจะทำมันก็จะมีเพียง 5% ของผลกระทบที่มันจะนึกคิด

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

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

ประสิทธิภาพของหน่วยความจำ

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

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

วิธีการแก้

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

ราคา

ฉันจะจุ่มลงในด้าน "ต้นทุน" ที่ถกเถียงกันมากขึ้นเพียงเล็กน้อยที่มีปรากฏการณ์ "การใช้จ่าย" ที่ฉันสังเกตเห็น หากภาษาลงท้ายด้วยแท็กราคาที่หลีกเลี่ยงไม่ได้สำหรับวัตถุ (เช่นภาษาที่ให้ภาพสะท้อนแบบรันไทม์และไม่สามารถบังคับการจัดสรรแบบต่อเนื่องสำหรับชุดของวัตถุ) ป้ายราคานั้นมีราคาแพงในบริบทขององค์ประกอบที่ละเอียดมากเช่น เดี่ยวPixelหรือBoolean.

แต่ฉันเห็นซอร์สโค้ดจำนวนมากสำหรับโปรแกรมที่จัดการกับภาระจำนวนมาก (เช่นการจัดการกับหลายแสนถึงล้านครั้งPixelหรือหลายBooleanครั้ง) ซึ่งจ่ายค่าใช้จ่ายในระดับที่ละเอียดมาก

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

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

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

การเพิ่มประสิทธิภาพก่อนวัยอันควร

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

นี่เป็นปรากฏการณ์สุดท้ายที่ฉันสังเกตเห็นซึ่งนักพัฒนาเข้าถึงการประหยัดเพนนีในการซื้อโซดากระป๋องเดียวไม่เคยถูกซื้ออีกหรือแย่กว่านั้นบ้านกำลังสูญเสียเวลาฉกชิงเพนนี (หรือแย่กว่านั้นเพนนีจินตนาการจาก ไม่เข้าใจคอมไพเลอร์หรือสถาปัตยกรรมของฮาร์ดแวร์) เมื่อมีการใช้เงินไปหลายพันล้านดอลลาร์อย่างสิ้นเปลือง

เวลามี จำกัด มากดังนั้นการพยายามทำให้สัมบูรณ์สมบูรณ์โดยไม่ต้องมีข้อมูลบริบทที่เหมาะสมมักทำให้เราขาดโอกาสในการปรับสถานที่ที่แท้จริงอย่างแท้จริงและดังนั้นในแง่ของผลเชิงปฏิบัติฉันจะบอกว่า "การเพิ่มประสิทธิภาพก่อนกำหนดทำให้ซอฟต์แวร์ช้าลงมาก "

ปัญหาคือมีนักพัฒนาประเภทหนึ่งที่จะใช้สิ่งที่ฉันเขียนไว้ด้านบนเกี่ยวกับวัตถุและพยายามสร้างมาตรฐานการเข้ารหัสที่ห้ามการเขียนโปรแกรมเชิงวัตถุ การเพิ่มประสิทธิภาพที่มีประสิทธิภาพคือการจัดลำดับความสำคัญที่มีประสิทธิภาพและไม่มีค่าอย่างแน่นอนหากเราจมอยู่ในปัญหาการบำรุงรักษา


2
หนี้ทางเทคนิคในคำอื่น ๆ หนี้ทางเทคนิคที่ไม่เคยจ่ายออกไป
Robert Harvey

1
โรเบิร์ตถูกต้อง ความผิดพลาดหนึ่งอย่างจากผู้ชายสองร้อยข้อผิดพลาด--forced โดยผู้จัดการตะโกน "คุณจะถูกไล่ออกหากคุณไม่ได้ใช้สิ่งนี้ในวันพรุ่งนี้" ซึ่งเป็นการฝึกปฏิบัติทางวิศวกรรมซอฟต์แวร์ที่ดี TDD การทดสอบหน่วยและหลักการเขียนโปรแกรมมนุษย์และสติ และอีกสองครั้งที่คุณเหนื่อย .. คนที่ออกจาก บริษัท บ้าเพราะเขาถูกปลดออกจากงานโดยไม่มีเหตุผลและทำให้ยุ่งเหยิง codebase .. ห้องสมุดที่เลิกผลิตที่คุณไม่เคยปรับปรุง ... และที่นี่คุณมีมัน: สปาเก็ตตี้โค้ดเบสแสนอร่อย และซอฟต์แวร์ป่อง Bon Appetit
user3834459

2
ที่น่าสนใจโดยเฉพาะอย่างยิ่งในวิธีการที่คุณเห็นเม็ดละเอียดมากเกินไปในทางที่ผิด ฉันได้จับตัวเองทำบางสิ่งบางอย่างที่คล้ายกันในโอกาสที่ผ่านมาและได้รับประสิทธิภาพที่ไม่ดีตาม นี้ค่อนข้างคล้ายกับคำตอบของคุณจากไม่กี่วันที่ผ่านมาเกี่ยวกับการใช้คอลเลกชันและขั้นตอนในการตั้งค่าจำนวนมากเกินกว่าความละเอียดมากเกินไป ฉันไม่อยากจะเชื่อเลยว่าคำตอบนั้นไม่ได้รับการชื่นชมอย่างมากต่อความลึกซึ้งของมัน มันทำให้ฉันคิดใหม่เกี่ยวกับการออกแบบหลายอย่างที่ฉันได้สร้างขึ้นในช่วงหลายปีที่ผ่านมา ฉันสงสัยว่าทำไมเทคนิคเหล่านั้นไม่ได้รับการส่งเสริมอย่างกว้างขวางมากขึ้น?
Mike รองรับโมนิก้า

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

1
ในสมัยก่อนฉันใช้โค้ดบางอย่างเพื่อเลี่ยง API กราฟิกและเข้าถึงพิกเซลในหน่วยความจำโดยตรงสำหรับชิ้นส่วนที่สำคัญของรหัสของฉัน ความแตกต่างระหว่างสิ่งที่เป็นนามธรรมหลายชั้นและการเข้าถึงโดยตรงคือบางสิ่งบางอย่างเช่น 100x ซึ่งสำคัญในคอมพิวเตอร์ในสมัยนั้น ตอนนี้คอมพิวเตอร์ของคุณเร็วพอที่คุณจะสามารถหวดผ่านสิ่งที่เป็นนามธรรมจำนวนมากหากคุณต้องการ
Michael Shopsin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.