คำถามติดแท็ก micro-optimization

23
ตัวเลือกใดดีกว่าที่จะใช้สำหรับหารจำนวนเต็ม 2
เทคนิคใดต่อไปนี้เป็นตัวเลือกที่ดีที่สุดสำหรับการหารจำนวนเต็ม 2 และทำไม เทคนิค 1: x = x >> 1; เทคนิค 2: x = x / 2; นี่xคือจำนวนเต็ม

13
ฉันควรใช้ String.format () ของ Java หรือไม่หากประสิทธิภาพมีความสำคัญ
เราต้องสร้าง Strings ตลอดเวลาเพื่อบันทึกผลลัพธ์และอื่น ๆ ในเวอร์ชั่น JDK เราได้เรียนรู้ว่าเมื่อไรควรใช้StringBuffer(ผนวกหลายอัน, เธรดที่ปลอดภัย) และStringBuilder(ผนวกท้ายหลายอัน, ไม่ใช้เธรดที่ปลอดภัย) คำแนะนำในการใช้String.format()คืออะไร? มันมีประสิทธิภาพหรือไม่หรือเราถูกบังคับให้ติดกับการต่อข้อมูลสำหรับหนึ่ง liners ที่ประสิทธิภาพเป็นสิ่งสำคัญหรือไม่ เช่นแบบเก่าที่น่าเกลียด String s = "What do you get if you multiply " + varSix + " by " + varNine + "?"; เทียบกับรูปแบบใหม่ที่เป็นระเบียบ (String.format ซึ่งอาจช้ากว่า) String s = String.format("What do you get if you multiply %d …

3
สิ่งที่โปรแกรมเมอร์ทุกคนควรรู้เกี่ยวกับหน่วยความจำ
ฉันสงสัยว่า Ulrich Drepper เป็นเท่าใดโปรแกรมเมอร์ทุกคนควรทราบเกี่ยวกับหน่วยความจำจากปี 2007 ยังคงใช้ได้ ฉันไม่สามารถหาเวอร์ชั่นที่ใหม่กว่า 1.0 หรือ errata ได้

1
วิธีใดเป็นวิธีที่ดีที่สุดในการตั้งค่ารีจิสเตอร์เป็นศูนย์ในแอสเซมบลี x86: xor, mov หรือและ?
คำแนะนำต่อไปนี้ทั้งหมดทำสิ่งเดียวกัน: ตั้งค่า%eaxเป็นศูนย์ วิธีใดเหมาะสมที่สุด (ต้องใช้รอบเครื่องน้อยที่สุด) xorl %eax, %eax mov $0, %eax andl $0, %eax

3
เหตุใดแอปพลิเคชันของฉันจึงใช้เวลา 24% ของชีวิตในการตรวจสอบค่าว่าง
ฉันมีโครงสร้างการตัดสินใจไบนารีที่สำคัญด้านประสิทธิภาพและฉันต้องการเน้นคำถามนี้ไปที่โค้ดบรรทัดเดียว โค้ดสำหรับตัววนซ้ำต้นไม้ไบนารีอยู่ด้านล่างพร้อมผลลัพธ์จากการรันการวิเคราะห์ประสิทธิภาพเทียบกับมัน public ScTreeNode GetNodeForState(int rootIndex, float[] inputs) { 0.2% ScTreeNode node = RootNodes[rootIndex].TreeNode; 24.6% while (node.BranchData != null) { 0.2% BranchNodeData b = node.BranchData; 0.5% node = b.Child2; 12.8% if (inputs[b.SplitInputIndex] <= b.SplitValue) 0.8% node = b.Child1; } 0.4% return node; } BranchData เป็นฟิลด์ไม่ใช่คุณสมบัติ ฉันทำสิ่งนี้เพื่อป้องกันความเสี่ยงที่มันจะไม่อินไลน์ คลาส BranchNodeData เป็นดังนี้: public …

3
ค่าใช้จ่ายของตัวจัดการข้อยกเว้นใน Python
ในคำถามอื่นคำตอบที่ยอมรับได้แนะนำให้แทนที่คำสั่ง if (ถูกมาก) ในโค้ด Python ด้วยบล็อก try / except เพื่อปรับปรุงประสิทธิภาพ สไตล์การเข้ารหัสมีปัญหากันและสมมติว่าไม่มีการเรียกใช้ข้อยกเว้นจะทำให้มีตัวจัดการข้อยกเว้น (ประสิทธิภาพที่ชาญฉลาด) แตกต่างกันมากน้อยเพียงใดเมื่อเทียบกับการไม่มี if-statement ที่เปรียบเทียบกับศูนย์

4
อะไรเร็วกว่า: in_array หรือ isset [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา คำถามนี้เป็นเพียงสำหรับฉันเพราะฉันมักจะชอบเขียนโค้ดที่ปรับให้เหมาะสมซึ่งสามารถทำงานบนเซิร์ฟเวอร์ที่ช้าราคาถูก (หรือเซิร์ฟเวอร์ที่มีปริมาณการใช้งานมาก) ฉันมองไปรอบ ๆ และไม่สามารถหาคำตอบได้ ฉันสงสัยว่าอะไรจะเร็วกว่าระหว่างสองตัวอย่างนี้โปรดทราบว่าคีย์ของอาร์เรย์ในกรณีของฉันไม่สำคัญ (รหัสหลอกตามธรรมชาติ): <?php $a = array(); while($new_val = 'get over 100k email addresses already lowercased'){ if(!in_array($new_val, $a){ $a[] = $new_val; //do other stuff } } ?> <?php $a = array(); while($new_val = 'get over 100k email addresses …

9
เมื่อใดถ้าเคยการคลายการวนซ้ำยังคงมีประโยชน์อยู่หรือไม่?
ฉันพยายามเพิ่มประสิทธิภาพโค้ดที่มีความสำคัญอย่างยิ่ง (อัลกอริธึมการเรียงลำดับอย่างรวดเร็วที่ถูกเรียกเป็นล้าน ๆ ล้านครั้งในการจำลองมอนติคาร์โล) โดยการคลายการวนซ้ำ นี่คือวงในที่ฉันพยายามเร่งความเร็ว: // Search for elements to swap. while(myArray[++index1] < pivot) {} while(pivot < myArray[--index2]) {} ฉันพยายามยกเลิกการเล่นบางอย่างเช่น: while(true) { if(myArray[++index1] < pivot) break; if(myArray[++index1] < pivot) break; // More unrolling } while(true) { if(pivot < myArray[--index2]) break; if(pivot < myArray[--index2]) break; // More unrolling } สิ่งนี้ไม่แตกต่างอย่างแน่นอนดังนั้นฉันจึงเปลี่ยนกลับเป็นรูปแบบที่อ่านได้มากขึ้น …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.