คำถามติดแท็ก performance

สำหรับคำถามที่เกี่ยวข้องกับการวัดหรือปรับปรุงรหัสและประสิทธิภาพการใช้งาน

27
เปรียบเทียบสองอาร์เรย์ไบต์ใน. NET
ฉันจะทำเร็วนี้ได้อย่างไร แน่นอนฉันสามารถทำสิ่งนี้: static bool ByteArrayCompare(byte[] a1, byte[] a2) { if (a1.Length != a2.Length) return false; for (int i=0; i<a1.Length; i++) if (a1[i]!=a2[i]) return false; return true; } แต่ฉันกำลังมองหาฟังก์ชันBCLหรือวิธีที่ได้รับการพิสูจน์แล้วว่าเหมาะสมที่สุดในการทำเช่นนี้ java.util.Arrays.equals((sbyte[])(Array)a1, (sbyte[])(Array)a2); ทำงานได้ดี แต่ดูเหมือนว่าจะไม่ทำงานสำหรับ x64 หมายเหตุ: คำตอบอย่างรวดเร็วของฉันที่นี่
541 c#  .net  arrays  performance  j# 

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

16
มันจะดีกว่าที่จะเรียก ToList () หรือ ToArray () ในการสืบค้น LINQ?
ฉันมักจะทำงานในกรณีที่ฉันต้องการที่จะประเมินการสอบถามที่ฉันประกาศ นี่เป็นเพราะฉันต้องทำซ้ำหลาย ๆ ครั้งและมันมีราคาแพงในการคำนวณ ตัวอย่างเช่น: string raw = "..."; var lines = (from l in raw.Split('\n') let ll = l.Trim() where !string.IsNullOrEmpty(ll) select ll).ToList(); ใช้งานได้ดี แต่ถ้าฉันจะไม่แก้ไขผลลัพธ์ฉันก็อาจจะโทรหาคุณToArray()แทนToList()ก็ได้ แต่ฉันสงสัยว่าToArray()จะดำเนินการโดยการโทรครั้งแรกและเป็นหน่วยความจำจึงมีประสิทธิภาพน้อยกว่าเพียงแค่โทรToList()ToList() ฉันบ้าเหรอ? ฉันควรจะโทรToArray()- ปลอดภัยในความรู้ที่หน่วยความจำจะไม่ถูกจัดสรรสองครั้ง?
519 .net  linq  performance 

23
วิธีที่ดีที่สุดในการแปลงตัวเลขเป็นสตริงใน JavaScript คืออะไร
อะไรคือ "วิธีที่ดีที่สุด" ในการแปลงตัวเลขเป็นสตริง (ในแง่ของความได้เปรียบด้านความเร็วความได้เปรียบที่ชัดเจนความได้เปรียบของหน่วยความจำ ฯลฯ ) ตัวอย่างบางส่วน: String(n) n.toString() ""+n n+""

3
ประสิทธิภาพการใช้งานจริงของคอนเทนเนอร์ Docker คืออะไร
ฉันต้องการเข้าใจค่าใช้จ่ายการปฏิบัติงานของคอนเทนเนอร์ Docker อย่างครอบคลุม ฉันได้พบการอ้างอิงไปยังเครือข่าย anecdotally เป็น ~ 100μsช้าลง ฉันยังพบการอ้างอิงถึงค่าใช้จ่ายในการดำเนินการเป็น "เล็กน้อย" และ "ใกล้กับศูนย์" แต่ฉันต้องการทราบอย่างแม่นยำมากขึ้นว่าค่าใช้จ่ายเหล่านั้นคืออะไร โดยหลักการแล้วฉันต้องการทราบว่านักเทียบท่าคืออะไรที่เป็นนามธรรมด้วยต้นทุนด้านประสิทธิภาพและสิ่งที่เป็นนามธรรมโดยไม่มีต้นทุนด้านประสิทธิภาพ เครือข่าย, CPU, หน่วยความจำ ฯลฯ นอกจากนี้หากมีค่าใช้จ่ายที่เป็นนามธรรมจะมีวิธีที่จะได้รับรอบค่าใช้จ่ายที่เป็นนามธรรม ตัวอย่างเช่นบางทีฉันสามารถเมานดิสก์ได้โดยตรงเทียบกับใน Docker

23
ซึ่งเร็วกว่า: การจัดสรรสแต็กหรือการจัดสรรฮีป
คำถามนี้อาจฟังดูค่อนข้างธรรมดา แต่เป็นการอภิปรายที่ฉันมีกับผู้พัฒนารายอื่นที่ฉันทำงานด้วย ฉันกำลังดูแลการจัดสรรสิ่งต่าง ๆ ที่ฉันสามารถทำได้แทนที่จะกองพวกเขา เขากำลังพูดกับฉันและเฝ้าไหล่ของฉันและแสดงความคิดเห็นว่ามันไม่จำเป็นเพราะมันเป็นการแสดงที่ฉลาดเหมือนกัน ฉันอยู่ภายใต้การแสดงผลเสมอว่าการเติบโตของสแต็กนั้นเป็นเวลาที่คงที่และประสิทธิภาพของการจัดสรรฮีปขึ้นอยู่กับความซับซ้อนในปัจจุบันของฮีปสำหรับการจัดสรรทั้งสอง (การหารูขนาดที่เหมาะสม) และการจัดสรร (ยุบหลุมเพื่อลดการกระจายตัว การใช้งานไลบรารีมาตรฐานจำนวนมากต้องใช้เวลาในการทำสิ่งนี้ในระหว่างการลบหากฉันไม่ผิดพลาด) สิ่งนี้ทำให้ฉันเป็นสิ่งที่อาจต้องพึ่งพาผู้แปล สำหรับโครงการนี้โดยเฉพาะฉันใช้คอมไพเลอร์MetrowerksสำหรับสถาปัตยกรรมPPC ข้อมูลเชิงลึกเกี่ยวกับชุดค่าผสมนี้จะมีประโยชน์มากที่สุด แต่โดยทั่วไปสำหรับ GCC และ MSVC ++ กรณีนี้คืออะไร การจัดสรรฮีปไม่สูงเท่ากับประสิทธิภาพการจัดสรรสแต็กหรือไม่ ไม่มีความแตกต่าง? หรือความแตกต่างดังนั้นนาทีมันกลายเป็นไมโครเพิ่มประสิทธิภาพไม่มีจุดหมาย
503 c++  performance  memory  stack  heap 

14
แปลงชุดเป็นรายการโดยไม่ต้องสร้างรายการใหม่
ฉันใช้รหัสนี้เพื่อแปลง a Setเป็นList: Map<String, List<String>> mainMap = new HashMap<>(); for (int i=0; i < something.size(); i++) { Set<String> set = getSet(...); //returns different result each time List<String> listOfNames = new ArrayList<>(set); mainMap.put(differentKeyName, listOfNames); } ฉันต้องการหลีกเลี่ยงการสร้างรายการใหม่ในการวนซ้ำแต่ละครั้ง เป็นไปได้ไหม
503 java  performance  list  set 

30
ฉันจะทราบได้อย่างไรว่าจุด 2D นั้นอยู่ในรูปหลายเหลี่ยมหรือไม่
ฉันกำลังพยายามสร้างจุด 2D ที่รวดเร็วภายในอัลกอริทึมรูปหลายเหลี่ยมเพื่อใช้ในการทดสอบการตี (เช่นPolygon.contains(p:Point)) ข้อเสนอแนะสำหรับเทคนิคที่มีประสิทธิภาพจะได้รับการชื่นชม

18
ผลของข้อยกเว้นต่อประสิทธิภาพใน Java คืออะไร
คำถาม: การจัดการข้อยกเว้นใน Java ช้าจริงหรือไม่ ภูมิปัญญาดั้งเดิมรวมถึงผลการค้นหาของ Google จำนวนมากกล่าวว่าไม่ควรใช้ตรรกะพิเศษสำหรับการไหลเวียนของโปรแกรมปกติใน Java โดยปกติจะมีสองเหตุผล มันช้ามาก - แม้ลำดับความสำคัญจะช้ากว่ารหัสปกติ (เหตุผลที่ให้แตกต่างกันไป) และ มันยุ่งเพราะคนคาดหวังว่าข้อผิดพลาดเท่านั้นที่จะจัดการในรหัสพิเศษ คำถามนี้เกี่ยวกับ # 1 ตัวอย่างเช่นหน้านี้อธิบายการจัดการข้อยกเว้น Java ว่า "ช้ามาก" และเกี่ยวข้องกับความช้าในการสร้างสตริงข้อความข้อยกเว้น - "สตริงนี้จะใช้ในการสร้างวัตถุยกเว้นที่ถูกโยนนี่ไม่เร็ว" บทความการจัดการข้อยกเว้นที่มีประสิทธิภาพใน Javaกล่าวว่า "เหตุผลนี้เกิดจากการสร้างวัตถุของการจัดการข้อยกเว้นซึ่งทำให้การโยนข้อยกเว้นช้าโดยเนื้อแท้" อีกเหตุผลหนึ่งคือการสร้างการติดตามสแต็กคือสิ่งที่ทำให้ช้าลง การทดสอบของฉัน (โดยใช้ Java 1.6.0_07, Java HotSpot 10.0, บน 32 บิต Linux) ระบุว่าการจัดการข้อยกเว้นไม่ช้ากว่าโค้ดปกติ ฉันลองใช้วิธีการในวงที่รันรหัสบางอย่าง ในตอนท้ายของวิธีการที่ผมใช้บูลที่จะบ่งชี้ว่าจะกลับมาหรือโยน วิธีนี้การประมวลผลจริงจะเหมือนกัน ฉันลองใช้วิธีการตามคำสั่งต่าง ๆ และหาค่าเฉลี่ยเวลาทดสอบของฉันโดยคิดว่า JVM อาจร้อนขึ้น ในการทดสอบทั้งหมดของฉันการขว้างอย่างน้อยเท่ากับการส่งคืนถ้าไม่เร็วขึ้น …

30
การประกอบเร็วกว่า C เมื่อใด
หนึ่งในเหตุผลที่ระบุไว้สำหรับการทราบแอสเซมเบลอร์คือในบางครั้งมันสามารถใช้ในการเขียนรหัสที่จะมีประสิทธิภาพมากกว่าการเขียนโค้ดนั้นในภาษาระดับสูงโดยเฉพาะอย่างยิ่ง C แต่ผมเคยได้ยินยังระบุไว้หลายครั้งแล้วว่าถึงแม้ว่ามันจะไม่ได้เป็นเท็จอย่างสิ้นเชิงกรณีที่ผู้ประกอบสามารถจริงจะนำมาใช้เพื่อสร้างรหัส performant มากขึ้นมีทั้งหายากมากและต้องใช้ความรู้จากผู้เชี่ยวชาญและประสบการณ์เกี่ยวกับการชุมนุม คำถามนี้ไม่ได้เกี่ยวกับข้อเท็จจริงที่ว่าคำสั่งแอสเซมเบลอร์จะเป็นแบบเฉพาะเครื่องจักรและไม่ใช่แบบพกพาหรือด้านอื่น ๆ ของแอสเซมเบลอร์ มีเหตุผลที่ดีมากมายในการรู้จักการประกอบนอกเหนือจากนี้แน่นอน แต่นี่เป็นคำถามที่เฉพาะเจาะจงเพื่อชักชวนตัวอย่างและข้อมูลไม่ใช่การสนทนาที่เพิ่มขึ้นของผู้ประกอบการกับภาษาระดับสูง ทุกคนสามารถให้ตัวอย่างเฉพาะของกรณีที่การชุมนุมจะเร็วกว่ารหัส C ที่เขียนดีโดยใช้คอมไพเลอร์ที่ทันสมัยและคุณสามารถสนับสนุนการเรียกร้องที่มีหลักฐานการทำโปรไฟล์? ฉันค่อนข้างมั่นใจว่ากรณีเหล่านี้มีอยู่จริง แต่ฉันต้องการทราบอย่างแน่ชัดว่าคดีเหล่านี้เป็นความลับอย่างไรเพราะมันดูเหมือนจะเป็นประเด็นของความขัดแย้ง
475 c  performance  assembly 

15
DateTime เป็นวิธีที่ดีที่สุดในการวัดประสิทธิภาพของฟังก์ชันหรือไม่
ฉันต้องการค้นหาคอขวดและต้องการเวลาการวัดที่แม่นยำที่สุดเท่าที่จะทำได้ โค้ดต่อไปนี้เป็นวิธีที่ดีที่สุดในการวัดประสิทธิภาพหรือไม่ DateTime startTime = DateTime.Now; // Some execution process DateTime endTime = DateTime.Now; TimeSpan totalTimeTaken = endTime.Subtract(startTime);
474 c#  .net  performance  datetime  timer 

19
เป็นวิธีที่ดีที่สุดในการเลขหน้าผลลัพธ์ใน SQL Server อะไร
เป็นวิธีที่ดีที่สุด (ประสิทธิภาพฉลาด) เพื่อเลขหน้าผลลัพธ์ใน SQL Server 2000, 2005, 2008, 2012 ถ้าคุณต้องการได้รับจำนวนผลรวม (ก่อนที่จะเลขหน้า) คืออะไร?


30
ทำตัวอักษรตัวแรกของตัวพิมพ์ใหญ่ของสตริง (ด้วยประสิทธิภาพสูงสุด)
ฉันมีDetailsViewด้วยTextBox และฉันต้องการข้อมูลของท่านได้รับการบันทึกไว้เสมอกับเมืองหลวงแห่งแรกในจดหมาย ตัวอย่าง: "red" --> "Red" "red house" --> " Red house" ฉันจะบรรลุประสิทธิภาพสูงสุดนี้ได้อย่างไร หมายเหตุ : จากคำตอบและความคิดเห็นภายใต้คำตอบหลายคนคิดว่าสิ่งนี้กำลังถามเกี่ยวกับการใช้อักษรตัวพิมพ์ใหญ่ทั้งหมดในสตริง เช่น=> Red House มันไม่ได้ แต่ถ้านั่นคือสิ่งที่คุณต้องการให้มองหาหนึ่งในคำตอบที่ใช้TextInfoเป็นToTitleCaseวิธีการ (หมายเหตุ: คำตอบเหล่านั้นไม่ถูกต้องสำหรับคำถามที่ถามจริง) ดูTextInfo.ToTitleCase docสำหรับ caveats (ไม่ได้สัมผัสคำที่มีตัวพิมพ์ใหญ่ทั้งหมด - ถือว่าเป็นตัวย่อซึ่งอาจเป็นตัวพิมพ์เล็กในคำกลางที่ "ไม่ควร" ลดลงเช่น "McDonald" => "Mcdonald"; ไม่รับประกันว่าจะจัดการกฎการใช้ตัวพิมพ์เล็กทั้งหมดสำหรับวัฒนธรรมโดยละเอียด) หมายเหตุ : คำถามที่คลุมเครือว่าตัวอักษรหลังแรกควรถูกบังคับให้พิมพ์เล็กหรือไม่ คำตอบที่ได้รับการยอมรับสมมติว่าเฉพาะอักษรตัวแรกควรจะมีการเปลี่ยนแปลง หากคุณต้องการที่จะบังคับตัวอักษรทั้งหมดในสตริงยกเว้นคนแรกจะเป็นกรณีที่ต่ำกว่ามองหาคำตอบที่มีToLowerและไม่ได้มี ToTitleCase
448 c#  performance 

6
เหตุใด GCC จึงสร้างรหัสเร็วขึ้น 15-20% หากฉันปรับขนาดให้เหมาะสมแทนความเร็ว
ฉันสังเกตเห็นครั้งแรกในปี 2009 ว่า GCC (อย่างน้อยในโครงการของฉันและในเครื่องของฉัน) มีแนวโน้มที่จะสร้างรหัสที่เร็วขึ้นอย่างเห็นได้ชัดถ้าฉันปรับขนาด ( -Os) แทนความเร็ว ( -O2หรือ-O3) และฉันสงสัยตั้งแต่นั้นมา ฉันมีการจัดการเพื่อสร้างรหัส (ค่อนข้างโง่) ที่แสดงพฤติกรรมที่น่าแปลกใจนี้และมีขนาดเล็กพอที่จะโพสต์ที่นี่ const int LOOP_BOUND = 200000000; __attribute__((noinline)) static int add(const int& x, const int& y) { return x + y; } __attribute__((noinline)) static int work(int xval, int yval) { int sum(0); for (int i=0; i<LOOP_BOUND; ++i) …

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