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

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

5
HashSet <T> เทียบกับ Dictionary <K, V> wrt เวลาค้นหาเพื่อดูว่ามีรายการอยู่หรือไม่
HashSet&lt;T&gt; t = new HashSet&lt;T&gt;(); // add 10 million items Dictionary&lt;K, V&gt; t = new Dictionary&lt;K, V&gt;(); // add 10 million items. .Containsวิธีของใครจะกลับเร็วกว่ากัน? เพื่อชี้แจงความต้องการของฉันคือฉันมีวัตถุ 10 ล้านรายการ (สตริงจริงๆ) ที่ฉันต้องตรวจสอบว่ามีอยู่ในโครงสร้างข้อมูลหรือไม่ ฉันจะไม่ทำซ้ำ

20
มีอะไรผิดปกติเกี่ยวกับการใช้ GC.Collect ()?
แม้ว่าฉันจะเข้าใจถึงผลกระทบที่ร้ายแรงของการเล่นกับฟังก์ชันนี้ (หรืออย่างน้อยก็คือสิ่งที่ฉันคิด) แต่ฉันก็ไม่เข้าใจว่าทำไมมันถึงกลายเป็นหนึ่งในสิ่งเหล่านี้ที่โปรแกรมเมอร์ผู้มีหน้ามีตาไม่เคยใช้แม้แต่คนที่ไม่รู้ด้วยซ้ำ มีไว้ทำอะไร. สมมติว่าฉันกำลังพัฒนาแอปพลิเคชันที่การใช้งานหน่วยความจำแตกต่างกันมากขึ้นอยู่กับสิ่งที่ผู้ใช้ทำ วงจรชีวิตของแอปพลิเคชันสามารถแบ่งออกเป็นสองขั้นตอนหลัก: การแก้ไขและการประมวลผลแบบเรียลไทม์ ในระหว่างขั้นตอนการแก้ไขสมมติว่ามีการสร้างวัตถุหลายพันล้านหรือหลายล้านล้านชิ้น บางคนมีขนาดเล็กและบางคนไม่มีบางคนอาจมีเข้ารอบสุดท้ายและบางคนอาจไม่มีและสมมติว่าช่วงชีวิตของพวกเขาแตกต่างกันไปตั้งแต่ไม่กี่มิลลิวินาทีไปจนถึงชั่วโมงที่ยาวนาน จากนั้นผู้ใช้จะตัดสินใจเปลี่ยนไปใช้ขั้นตอนแบบเรียลไทม์ ณ จุดนี้สมมติว่าประสิทธิภาพมีบทบาทพื้นฐานและการเปลี่ยนแปลงขั้นตอนของโปรแกรมเพียงเล็กน้อยอาจนำมาซึ่งผลที่ตามมาอย่างหายนะ การสร้างออบเจ็กต์จะลดลงเหลือน้อยที่สุดเท่าที่จะเป็นไปได้โดยใช้พูลอ็อบเจ็กต์และจากนั้น GC จะส่งเสียงกังวานโดยไม่คาดคิดและโยนมันออกไปทั้งหมดและมีคนตาย คำถาม: ในกรณีนี้ไม่ควรเรียก GC.Collect () ก่อนเข้าสู่ขั้นตอนที่สองหรือไม่? ท้ายที่สุดทั้งสองขั้นตอนนี้ไม่เคยเหลื่อมเวลาซึ่งกันและกันและการเพิ่มประสิทธิภาพและสถิติทั้งหมดที่ GC รวบรวมได้จะมีประโยชน์เพียงเล็กน้อยที่นี่ ... หมายเหตุ: ดังที่คุณบางคนได้ชี้ให้เห็นว่า. NET อาจไม่ใช่แพลตฟอร์มที่ดีที่สุดสำหรับแอปพลิเคชันเช่นนี้ แต่อยู่นอกเหนือขอบเขตของคำถามนี้ มีวัตถุประสงค์เพื่อชี้แจงว่าการเรียก GC.Collect () สามารถปรับปรุงพฤติกรรม / ประสิทธิภาพโดยรวมของแอปพลิเคชันได้หรือไม่ เราทุกคนยอมรับว่าสถานการณ์ที่คุณจะทำสิ่งนั้นหายากมาก แต่แล้วอีกครั้ง GC พยายามที่จะคาดเดาและทำได้ดีเกือบตลอดเวลา แต่ก็ยังเกี่ยวกับการคาดเดา ขอบคุณ.

9
วิธีที่เร็วที่สุดในการเปรียบเทียบสองชุดใน Java คืออะไร
ฉันกำลังพยายามเพิ่มประสิทธิภาพโค้ดส่วนหนึ่งซึ่งเปรียบเทียบองค์ประกอบของรายการ เช่น. public void compare(Set&lt;Record&gt; firstSet, Set&lt;Record&gt; secondSet){ for(Record firstRecord : firstSet){ for(Record secondRecord : secondSet){ // comparing logic } } } โปรดคำนึงว่าจำนวนบันทึกในชุดจะสูง ขอบคุณ เชคาร์
103 java  performance  set 

8
C # 'คือ' ประสิทธิภาพของตัวดำเนินการ
ฉันมีโปรแกรมที่ต้องการประสิทธิภาพที่รวดเร็ว ภายในหนึ่งในลูปด้านในฉันต้องทดสอบประเภทของวัตถุเพื่อดูว่ามันสืบทอดมาจากอินเทอร์เฟซที่แน่นอนหรือไม่ วิธีหนึ่งที่จะทำได้คือใช้ฟังก์ชันการตรวจสอบประเภทในตัวของ CLR วิธีการที่หรูหราที่สุดอาจเป็นคำหลัก 'is': if (obj is ISpecialType) อีกวิธีหนึ่งคือการให้คลาสฐานฟังก์ชัน GetType () เสมือนของฉันเองซึ่งส่งคืนค่า enum ที่กำหนดไว้ล่วงหน้า (ในกรณีของฉันจริงๆแล้วฉันต้องการบูลเท่านั้น) วิธีนั้นจะรวดเร็ว แต่ไม่ค่อยหรูหรา ฉันเคยได้ยินว่ามีคำสั่ง IL สำหรับคีย์เวิร์ด 'is' โดยเฉพาะ แต่นั่นไม่ได้หมายความว่าจะดำเนินการอย่างรวดเร็วเมื่อแปลเป็นแอสเซมบลีเนทีฟ ใครสามารถแบ่งปันข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพของ 'is' กับวิธีการอื่น ๆ ได้บ้าง? อัปเดต: ขอบคุณสำหรับคำตอบทั้งหมด! ดูเหมือนว่ามีคำตอบที่เป็นประโยชน์สองสามประเด็น: ประเด็นของ Andrew เกี่ยวกับ 'is' การแสดงโดยอัตโนมัติเป็นสิ่งสำคัญ แต่ข้อมูลประสิทธิภาพที่รวบรวมโดย Binary Worrier และ Ian ก็มีประโยชน์อย่างมากเช่นกัน จะดีมากถ้าคำตอบข้อใดข้อหนึ่งได้รับการแก้ไขเพื่อรวมข้อมูลทั้งหมดนี้
103 c#  performance  clr  gettype 


25
การเพิ่มประสิทธิภาพ / ทางเลือก Java HashMap
ฉันต้องการสร้าง HashMap ขนาดใหญ่ แต่put()ประสิทธิภาพไม่ดีพอ ความคิดใด ๆ ? ยินดีรับคำแนะนำโครงสร้างข้อมูลอื่น ๆ แต่ฉันต้องการคุณสมบัติการค้นหาของ Java Map: map.get(key) ในกรณีของฉันฉันต้องการสร้างแผนที่ที่มี 26 ล้านรายการ การใช้ Java HashMap มาตรฐานอัตราการใส่จะช้าลงเหลือทนหลังจากการแทรก 2-3 ล้านครั้ง มีใครรู้บ้างว่าการใช้การแจกแจงรหัสแฮชที่แตกต่างกันสำหรับคีย์สามารถช่วยได้หรือไม่? วิธีการแฮชโค้ดของฉัน: byte[] a = new byte[2]; byte[] b = new byte[3]; ... public int hashCode() { int hash = 503; hash = hash * 5381 + (a[0] …

14
ASP.NET MVC ประสิทธิภาพ
ฉันพบคำพูดที่ดุร้ายว่า ASP.NET MVC เร็วกว่า ASP.NET WebForms ถึง 30 เท่า มีการวัดความแตกต่างของประสิทธิภาพที่แท้จริงอะไรบ้างและผลประโยชน์ด้านประสิทธิภาพคืออะไร นี่คือการช่วยฉันในการพิจารณาย้ายจาก ASP.NET WebForms เป็น ASP.NET MVC

5
วิธีที่มีประสิทธิภาพที่สุดในการสร้างคำสั่ง if-elif-elif-else เมื่อทำคำสั่งอื่นมากที่สุด?
ฉันมีคำสั่ง if-elif-elif-else ซึ่ง 99% ของเวลาคำสั่ง else จะถูกดำเนินการ: if something == 'this': doThis() elif something == 'that': doThat() elif something == 'there': doThere() else: doThisMostOfTheTime() โครงสร้างนี้ทำไปได้มากแต่เนื่องจากมันผ่านทุกเงื่อนไขก่อนที่จะถึงจุดอื่นฉันรู้สึกว่านี่ไม่ค่อยมีประสิทธิภาพเลยนับประสาอะไรกับ Pythonic ในทางกลับกันก็จำเป็นต้องรู้ว่าตรงตามเงื่อนไขเหล่านั้นหรือไม่ดังนั้นจึงควรทดสอบต่อไป มีใครทราบบ้างไหมว่าสามารถทำได้อย่างมีประสิทธิภาพมากขึ้นและอย่างไรหรือนี่เป็นเพียงวิธีที่ดีที่สุดที่จะทำได้

11
วิธีที่มีประสิทธิภาพที่สุดในการสร้างอักขระตัวแรกของ String ตัวพิมพ์เล็ก?
วิธีใดที่มีประสิทธิภาพที่สุดในการสร้างอักขระตัวแรกของตัวStringพิมพ์เล็ก ฉันคิดได้หลายวิธีในการทำสิ่งนี้: ใช้charAt()กับsubstring() String input = "SomeInputString"; String output = Character.toLowerCase(input.charAt(0)) + (input.length() &gt; 1 ? input.substring(1) : ""); หรือใช้charอาร์เรย์ String input = "SomeInputString"; char c[] = input.toCharArray(); c[0] = Character.toLowerCase(c[0]); String output = new String(c); ฉันแน่ใจว่ามีวิธีที่ยอดเยี่ยมอื่น ๆ อีกมากมายในการบรรลุเป้าหมายนี้ คุณแนะนำเมนูใด?

3
วิธีที่เร็วที่สุดในการเลือกองค์ประกอบลูกหลานใน jQuery คืออะไร?
เท่าคือผมรู้ว่ามีหลายวิธีในการเลือกองค์ประกอบของเด็กในjQuery //Store parent in a variable var $parent = $("#parent"); วิธีที่ 1 (โดยใช้ขอบเขต) $(".child", $parent).show(); วิธีที่ 2 (วิธีค้นหา ()) $parent.find(".child").show(); วิธีที่ 3 (สำหรับเด็กในระยะใกล้เท่านั้น) $parent.children(".child").show(); วิธีที่ 4 (ผ่านตัวเลือก CSS) - แนะนำโดย @spinon $("#parent &gt; .child").show(); วิธีที่ 5 (เหมือนกับวิธีที่ 2 ) - ตาม @Kai $("#parent .child").show(); ฉันไม่คุ้นเคยกับการทำโปรไฟล์เพื่อให้สามารถตรวจสอบสิ่งนี้ได้ด้วยตัวเองดังนั้นฉันอยากจะเห็นสิ่งที่คุณพูด ปล. ฉันเข้าใจว่านี่อาจเป็นคำถามที่ซ้ำกันได้แต่ไม่ครอบคลุมทุกวิธี

8
ความเร็วในการคอมไพล์ Java เทียบกับความเร็วในการคอมไพล์ Scala
ฉันเขียนโปรแกรมใน Scala มาระยะหนึ่งแล้วและฉันก็ชอบ แต่สิ่งหนึ่งที่ฉันรำคาญคือเวลาที่ใช้ในการรวบรวมโปรแกรม ดูเหมือนจะเป็นเรื่องเล็กน้อย แต่ด้วย Java ฉันสามารถทำการเปลี่ยนแปลงเล็กน้อยในโปรแกรมของฉันคลิกปุ่ม run ใน netbeans และ BOOM มันทำงานและเมื่อเวลาผ่านไปการรวบรวมใน scala ดูเหมือนจะใช้เวลามาก ฉันได้ยินมาว่าด้วยโครงการขนาดใหญ่จำนวนมากภาษาสคริปต์มีความสำคัญมากเนื่องจากต้องใช้เวลาในการรวบรวมความต้องการที่ฉันไม่เห็นว่าเกิดขึ้นเมื่อฉันใช้ Java แต่ฉันมาจาก Java ซึ่งตามที่ฉันเข้าใจมันเร็วกว่าภาษาคอมไพล์อื่น ๆ และเร็วเพราะเหตุผลที่ฉันเปลี่ยนมาใช้ Scala (มันเป็นภาษาที่ง่ายมาก) ฉันจึงอยากถามว่าฉันจะทำให้ Scala คอมไพล์เร็วขึ้นได้ไหมและ scalac จะเร็วเท่า javac

14
การนำ StringBuilder มาใช้ซ้ำจะดีกว่าไหม
ฉันมีคำถามเกี่ยวกับประสิทธิภาพการใช้งาน StringBuilder ในลูปที่ยาวมากฉันกำลังจัดการ a StringBuilderและส่งต่อไปยังวิธีอื่นเช่นนี้: for (loop condition) { StringBuilder sb = new StringBuilder(); sb.append("some string"); . . . sb.append(anotherString); . . . passToMethod(sb.toString()); } การสร้างอินสแตนซ์StringBuilderในทุก ๆ วงจรเป็นทางออกที่ดีหรือไม่? และเรียกการลบแทนดีกว่าดังต่อไปนี้หรือไม่? StringBuilder sb = new StringBuilder(); for (loop condition) { sb.delete(0, sb.length); sb.append("some string"); . . . sb.append(anotherString); . . . passToMethod(sb.toString()); …

10
เหตุใดการสร้างกระบวนการใหม่จึงมีราคาแพงกว่าบน Windows มากกว่า Linux
ฉันได้ยินมาว่าการสร้างกระบวนการใหม่ในกล่อง Windows มีราคาแพงกว่าบน Linux นี่คือเรื่องจริง? ใครสามารถอธิบายเหตุผลทางเทคนิคว่าทำไมราคาแพงกว่าและให้เหตุผลทางประวัติศาสตร์สำหรับการตัดสินใจออกแบบเบื้องหลังเหตุผลเหล่านั้น

10
วิธีที่เร็วที่สุด (เวลาแฝงต่ำ) สำหรับการสื่อสารระหว่างกระบวนการระหว่าง Java และ C / C ++
ฉันมีแอป Java ที่เชื่อมต่อผ่านซ็อกเก็ต TCP ไปยัง "เซิร์ฟเวอร์" ที่พัฒนาใน C / C ++ ทั้งแอพและเซิร์ฟเวอร์ทำงานบนเครื่องเดียวกันกล่อง Solaris (แต่เรากำลังพิจารณาที่จะย้ายไปยัง Linux ในที่สุด) ประเภทของข้อมูลที่แลกเปลี่ยนคือข้อความธรรมดา (ล็อกอินเข้าสู่ระบบ ACK จากนั้นไคลเอนต์ขอบางสิ่งบางอย่างการตอบกลับของเซิร์ฟเวอร์) แต่ละข้อความมีความยาวประมาณ 300 ไบต์ ขณะนี้เราใช้ Sockets และทุกอย่างก็โอเคอย่างไรก็ตามฉันกำลังมองหาวิธีที่เร็วกว่าในการแลกเปลี่ยนข้อมูล (เวลาแฝงที่ต่ำกว่า) โดยใช้วิธี IPC ฉันได้ทำการค้นคว้าทางเน็ตและได้ทำการอ้างอิงถึงเทคโนโลยีต่อไปนี้: หน่วยความจำที่ใช้ร่วมกัน ท่อ คิว รวมทั้งสิ่งที่เรียกว่า DMA (Direct Memory Access) แต่ฉันไม่พบการวิเคราะห์ที่เหมาะสมของการแสดงตามลำดับทั้งวิธีการใช้งานทั้งใน JAVA และ C / C ++ (เพื่อให้พวกเขาสามารถพูดคุยกันได้) ยกเว้นท่อที่ฉันสามารถจินตนาการได้ว่าจะทำอย่างไร ใครสามารถแสดงความคิดเห็นเกี่ยวกับประสิทธิภาพและความเป็นไปได้ของแต่ละวิธีในบริบทนี้ ตัวชี้ / …
101 java  c++  performance  ipc  latency 

3
คำเตือนการใช้งาน jQuery ที่ไม่มีประสิทธิภาพใน PHPStorm IDE
ฉันเพิ่งอัปเกรด PHPStorm IDE เวอร์ชันของฉันและตอนนี้เตือนฉันเกี่ยวกับการใช้งาน jQuery ที่ไม่มีประสิทธิภาพ ตัวอย่างเช่น: var property_single_location = $("#property [data-role='content'] .container"); แจ้งคำเตือนนี้: ตรวจสอบว่าใช้ตัวเลือก jQuery อย่างมีประสิทธิภาพ แนะนำให้แยกตัวเลือกลูกหลานซึ่งนำหน้าด้วยตัวเลือก ID และเตือนเกี่ยวกับตัวเลือกที่ซ้ำกันซึ่งสามารถแคชได้ ดังนั้นคำถามของฉันคือ: เหตุใดจึงไม่มีประสิทธิภาพและวิธีใดที่มีประสิทธิภาพในการเลือกตัวเลือกข้างต้น ฉันเดาว่า: var property_single_location = $("#property").find("[data-role='content']").find(".container"); เป็นวิธีที่ถูกต้องหรือไม่?

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