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

คำถามที่เกี่ยวข้องกับการปรับปรุงประสิทธิภาพของแอปพลิเคชันอาจมีตั้งแต่สถาปัตยกรรมซอฟต์แวร์ที่เลือกไปจนถึงการเลือกอัลกอริทึม

5
ฟังก์ชั่นการโทรมีผลต่อประสิทธิภาพมากแค่ไหน
การแยกฟังก์ชั่นลงในวิธีการหรือฟังก์ชั่นเป็นสิ่งจำเป็นสำหรับรหัสแบบแยกส่วนการอ่านและการทำงานร่วมกันโดยเฉพาะอย่างยิ่งใน OOP แต่นี่หมายถึงจะมีการเรียกใช้ฟังก์ชันเพิ่มเติม การแยกรหัสของเราออกเป็นวิธีการหรือฟังก์ชั่นส่งผลกระทบต่อประสิทธิภาพการทำงานในภาษา* สมัยใหม่ได้อย่างไร? * รายการยอดนิยม: C, Java, C ++, C #, Python, JavaScript, Ruby ...

3
ทำงานผ่านหลักการความรับผิดชอบเดี่ยว (SRP) ใน Python เมื่อการโทรมีราคาแพง
บางจุดฐาน: การเรียกใช้เมธอด Python นั้น "แพง" เนื่องจากเป็นลักษณะที่ตีความได้ ในทางทฤษฎีถ้ารหัสของคุณก็พอง่ายที่จะหมดสภาพรหัสงูใหญ่มีผลกระทบเชิงลบที่นอกเหนือจากการอ่านและนำมาใช้ใหม่ ( ซึ่งเป็นกำไรที่ยิ่งใหญ่สำหรับนักพัฒนาไม่มากสำหรับผู้ใช้ ) หลักการความรับผิดชอบเดี่ยว (SRP) ช่วยให้สามารถอ่านโค้ดง่ายต่อการทดสอบและบำรุงรักษา โครงการมีพื้นหลังแบบพิเศษที่เราต้องการให้สามารถอ่านโค้ดการทดสอบและประสิทธิภาพของเวลาได้ ตัวอย่างเช่นโค้ดเช่นนี้ซึ่งเรียกใช้หลายวิธี (x4) จะช้ากว่าวิธีต่อไปนี้ซึ่งเป็นวิธีเดียว from operator import add class Vector: def __init__(self,list_of_3): self.coordinates = list_of_3 def move(self,movement): self.coordinates = list( map(add, self.coordinates, movement)) return self.coordinates def revert(self): self.coordinates = self.coordinates[::-1] return self.coordinates def get_coordinates(self): return self.coordinates ## …

5
ฉันควรใช้จำนวนแกนประมวลผลเท่าไหร่ #cores หรือ #cores -1?
ฉันมีการคำนวณขนาดใหญ่ที่ต้องทำ ในขณะที่ฉันสามารถใช้ประโยชน์จากคอร์ทั้งหมดฉันคิดว่ามีเหตุผลอะไรที่จะละทิ้งคอร์ 1 แกนและไม่ใช้มัน (cpu การคำนวณเท่านั้นไม่มี IO) หรือฉันประเมินระบบปฏิบัติการต่ำเกินไปซึ่งไม่รู้ว่าจะจัดการและสลับบริบทที่เหมาะสมแม้ว่าฉันใช้ประโยชน์จากคอร์ทั้งหมดหรือไม่

5
ค้นหาแบบที่ใกล้ที่สุดที่ดีที่สุดสำหรับวงกลม
ด้านล่างเป็นภาพตัวอย่างถ้าฉันมีจุดสีขาวตรงกลางและฉันต้องการค้นหาตำแหน่งที่ใกล้ที่สุดสำหรับวงกลมสีน้ำเงิน (ซึ่งเห็นได้ชัดว่าอยู่ในตำแหน่งที่ฉันวางไว้) ถ้าวงกลมสีแดงทั้งหมดมีอยู่แล้ว . ฉันจะหาตำแหน่งนั้นได้อย่างไร ประสิทธิภาพสำหรับฉันไม่ใช่สิ่งสำคัญสำหรับแอปพลิเคชันนี้

1
เข้าสู่ระบบไฟล์หรือตารางฐานข้อมูล?
ฉันกำลังพัฒนาเว็บแอปพลิเคชันที่ใช้ MS SQL สำหรับข้อมูลต่าง ๆ : รวมถึงผู้ใช้บัญชีผู้ใช้ใบอนุญาตผู้ใช้ราคาใบอนุญาตใบแจ้งหนี้ ฉันต้องการบันทึกการใช้งานแบบเรียลไทม์ของระบบของผู้ใช้และใช้สำหรับการเรียกเก็บเงินรายเดือน: เช่นบันทึกเมื่อใดก็ตามที่ผู้ใช้ได้รับหน้า / URL ที่เฉพาะเจาะจงและผู้ใช้ที่เรียกเก็บเงินเมื่อสิ้นเดือนตามจำนวนหน้าที่ดึงข้อมูล ฉันควรเขียนบันทึกเหตุการณ์เหล่านี้ลงในตารางในฐานข้อมูล MS SQL ของฉันหรือไม่ ฉันควรเขียนเหตุการณ์บันทึกเหล่านี้ลงในไฟล์บันทึกแบบต่อท้ายที่ไม่ใช่ SQL เท่านั้นหรือไม่ ฉันควรเขียนบันทึกเหตุการณ์เหล่านี้ลงในไฟล์บันทึกที่แตกต่างกันสำหรับผู้ใช้แต่ละคนหรือไม่ นี่ไม่ใช่เว็บไซต์ที่มีปริมาณมากโดยเฉพาะตัวอย่างเช่นมีผู้ใช้สูงสุด 10,000 คนต่อการทำกิจกรรมเฉลี่ย 5 เหตุการณ์ต่อวัน => 50,000 กิจกรรม / วัน = 30 กิจกรรม / นาที = 18,000,000 กิจกรรม / ปี ฉันถามเพราะดูเหมือนว่าตัวเลือกจะทำงานได้และฉันไม่เห็นว่ามีข้อได้เปรียบที่ชัดเจน ข้อมูลที่เกี่ยวข้องกับเหตุการณ์ที่เรียกเก็บเงินได้นั้นง่ายมากเช่น: ID ผู้ใช้ (ความสัมพันธ์กับ foreign key ไปยังตารางผู้ใช้ใน SQL) วันและเวลา …

2
การใช้มาโคร "น่าจะเป็น" และ "ไม่น่า" เท่าไหร่มีมากเกินไป?
มาโครที่รู้จักกันในชื่อlikelyและunlikelyมาโครช่วยให้คอมไพเลอร์ทราบว่าifจะป้อนหรือข้าม การใช้มันจะส่งผลในการปรับปรุงประสิทธิภาพ (ค่อนข้างเล็กน้อย) ฉันเริ่มใช้มันเมื่อไม่นานมานี้และฉันไม่แน่ใจว่าควรใช้คำใบ้ดังกล่าวบ่อยเพียงใด ฉันกำลังใช้กับการตรวจสอบข้อผิดพลาดifs unlikelyซึ่งมักจะถูกทำเครื่องหมายเป็น ตัวอย่างเช่น: mem = malloc(size); if (unlikely(mem == NULL)) goto exit_no_mem; ดูเหมือนว่าจะใช้ได้ แต่การตรวจสอบข้อผิดพลาดifเกิดขึ้นบ่อยครั้งดังนั้นจึงใช้มาโครดังกล่าว คำถามของฉันคือมันมีมากเกินไปlikelyและunlikelyแมโครในทุกการตรวจสอบข้อผิดพลาดif? ในขณะที่เราอยู่ที่นี่พวกเขามักจะใช้ที่อื่นที่ไหน? ในการใช้งานปัจจุบันของฉันมันอยู่ในไลบรารีที่ทำให้เกิดนามธรรมจากระบบย่อยเรียลไทม์ดังนั้นโปรแกรมจะกลายเป็นแบบพกพาระหว่าง RTAI, QNX และอื่น ๆ ที่กล่าวว่าฟังก์ชั่นส่วนใหญ่ค่อนข้างเล็กและเรียกฟังก์ชั่นอื่น ๆ หนึ่งหรือสองโดยตรง หลายคนมีstatic inlineฟังก์ชั่น อย่างแรกเลยไม่ใช่แอพพลิเคชั่นที่ฉันสามารถโพรไฟล์ได้ มันไม่มีเหตุผลที่จะ "ระบุคอขวด" เนื่องจากเป็นห้องสมุดไม่ใช่แอปพลิเคชันแบบสแตนด์อโลน ประการที่สองมันคล้ายกับ "ฉันรู้ว่ามันไม่น่าเป็นไปได้ฉันก็จะบอกให้คอมไพเลอร์" ifฉันไม่แข็งขันพยายามที่จะเพิ่มประสิทธิภาพ

4
ขีด จำกัด ขนาดที่ใช้ได้จริงของ Hashtable และ Dictionary ใน c #
อะไรคือข้อ จำกัด ในทางปฏิบัติสำหรับจำนวนรายการที่พจนานุกรม C # 4 หรือ Hashtable สามารถมีได้และจำนวนไบต์ทั้งหมดโครงสร้างเหล่านี้อาจมีเหตุผล ฉันจะทำงานกับวัตถุจำนวนมากและต้องการทราบว่าโครงสร้างเหล่านี้เริ่มมีปัญหาเมื่อใด สำหรับบริบทฉันจะใช้ระบบ 64 บิตกับหน่วยความจำมากมาย นอกจากนี้ฉันจะต้องค้นหาวัตถุโดยใช้รูปแบบบางอย่างหรือ 'คีย์' เมื่อพิจารณาถึงความต้องการประสิทธิภาพวัตถุเหล่านี้จะต้องอยู่ในหน่วยความจำและส่วนใหญ่จะมีอายุการใช้งานยาวนาน อย่าลังเลที่จะแนะนำวิธีการ / รูปแบบอื่น ๆ แม้ว่าฉันจะต้องหลีกเลี่ยงการใช้ห้องสมุดบุคคลที่สามหรือโอเพ่นซอร์ส สำหรับเหตุผลในสเปคฉันต้องสามารถสร้างสิ่งนี้โดยใช้ native C # ( หรือ C ++ \ CLI )

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

5
ซอฟต์แวร์ที่ซับซ้อนควรใช้ความซ้ำซ้อน / ความทนทานมากเพียงใด
จุดเน้นของคำถามนี้:ซอฟต์แวร์บางตัวทำงาน "งานพิเศษ" เพื่อเพิ่มโอกาสของผลลัพธ์ "ประสบความสำเร็จ / เป็นที่น่าพอใจที่สุด" แม้จะมีข้อผิดพลาดภายในหนึ่งครั้งหรือมากกว่าในซอฟต์แวร์ซึ่งต้องใช้เวลาดำเนินการนานขึ้นเมื่อเกิดข้อผิดพลาดเหล่านั้น สิ่งเหล่านี้เกิดขึ้นโดยที่ผู้ใช้ไม่ทราบถ้าผลลัพธ์สำเร็จ คำจำกัดความของซอฟต์แวร์ที่ซับซ้อน: มีโค้ดที่เขียนโดย (สนับสนุนจาก) นักพัฒนาซอฟต์แวร์มากกว่า 10 คนตลอดช่วงอายุการใช้งานและไม่ได้เขียนในกรอบเวลาเดียวกัน ขึ้นอยู่กับห้องสมุดภายนอกมากกว่า 10 แห่งแต่ละแห่งมีคำเตือน งานซอฟต์แวร์ทั่วไป (สำหรับการสร้างผลลัพธ์ที่ผู้ใช้ต้องการ) ต้องใช้พารามิเตอร์อินพุต 10 ตัวขึ้นไปซึ่งส่วนใหญ่มีค่าเริ่มต้น แต่สามารถกำหนดค่าได้หากผู้ใช้ต้องการการควบคุม สิ่งสำคัญที่สุดคือซอฟแวร์ที่มีความซับซ้อนญาติที่เหมาะสมกับงานที่มีการดำเนินการคือไม่ซับซ้อนโดยไม่จำเป็น แก้ไข:อะไรซับซ้อน โปรดดูมีความแตกต่างใหญ่ระหว่างที่ซับซ้อนและมีความซับซ้อนเป็น (ลิงก์โดยตรง) คำจำกัดความของความซ้ำซ้อน / ความทนทาน ภายในคำถามนี้ : (เพิ่มความทนทานตามความคิดเห็น) หากงานซอฟต์แวร์ล้มเหลวเมื่อใช้ชุดพารามิเตอร์ปัจจุบันให้ลองใช้พารามิเตอร์อื่น เห็นได้ชัดว่าจะต้องมีความรู้ภายในว่าพารามิเตอร์ "แตกต่าง" เหล่านั้นใช้เส้นทางโค้ดที่แตกต่างกันซึ่งอาจส่งผลให้ผลลัพธ์ที่แตกต่างกัน บางครั้งพา ธ ของรหัสที่แตกต่างกันเหล่านี้จะถูกเลือกตามการสังเกตของไลบรารีภายนอก ในตอนท้ายถ้างานจริงที่ดำเนินการแตกต่างจากข้อกำหนดของผู้ใช้เล็กน้อยผู้ใช้จะได้รับรายงานรายละเอียดความคลาดเคลื่อน สุดท้ายเช่นเดียวกับพารามิเตอร์ที่กำหนดค่าได้ 10-plus ความซ้ำซ้อนและการรายงานก็สามารถกำหนดค่าได้เช่นกัน ตัวอย่างของซอฟต์แวร์ดังกล่าว: การย้ายฐานข้อมูล ฐานข้อมูลธุรกิจ ฐานข้อมูลการควบคุมแหล่งที่มา ฯลฯ รุ่นที่แปลงระหว่างเอกสาร …

3
วิธีการตรวจสอบอินพุตโดยไม่มีข้อยกเว้นหรือความซ้ำซ้อน
เมื่อฉันพยายามสร้างส่วนต่อประสานสำหรับโปรแกรมเฉพาะฉันมักจะพยายามหลีกเลี่ยงการโยนข้อยกเว้นที่ขึ้นอยู่กับอินพุตที่ไม่ผ่านการตรวจสอบ ดังนั้นสิ่งที่มักจะเกิดขึ้นคือฉันคิดว่าโค้ดบางส่วนเช่นนี้ (นี่เป็นเพียงตัวอย่างเพื่อประโยชน์ของตัวอย่างไม่ต้องสนใจฟังก์ชั่นที่ใช้งานตัวอย่างใน Java): public static String padToEvenOriginal(int evenSize, String string) { if (evenSize % 2 == 1) { throw new IllegalArgumentException("evenSize argument is not even"); } if (string.length() >= evenSize) { return string; } StringBuilder sb = new StringBuilder(evenSize); sb.append(string); for (int i = string.length(); i < evenSize; i++) …

3
Foreach loop และการกำหนดค่าเริ่มต้นตัวแปร
มีความแตกต่างระหว่างโค้ดสองเวอร์ชันนี้หรือไม่? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } คอมไพเลอร์ไม่สนใจหรือ? เมื่อฉันพูดถึงความแตกต่างฉันหมายถึงในแง่ของประสิทธิภาพและการใช้หน่วยความจำ .. หรือโดยทั่วไปเพียงแค่ความแตกต่างใด ๆ หรือทำสองท้ายเป็นรหัสเดียวกันหลังจากรวบรวม?
11 c#  performance  memory 

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

3
Low Latency Unix / Linux
งานการเขียนโปรแกรม latency / ความถี่สูงต่ำส่วนใหญ่ (ขึ้นอยู่กับรายละเอียดของงาน) ดูเหมือนจะนำไปใช้กับแพลตฟอร์มยูนิกซ์ ในสเป็คจำนวนมากพวกเขาร้องขอเป็นพิเศษสำหรับผู้ที่มีประสบการณ์ประเภท "Linux latency ต่ำ" สมมติว่าสิ่งนี้ไม่ได้หมายถึงระบบปฏิบัติการ linux แบบเรียลไทม์ผู้คนสามารถให้ความช่วยเหลือฉันเกี่ยวกับสิ่งนี้ได้หรือไม่ ฉันรู้ว่าคุณสามารถตั้งค่าความสัมพันธ์ของ CPU กับเธรดได้ แต่ฉันสมมติว่าพวกเขาขอมากไปกว่านั้น การปรับแต่งเคอร์เนล? (แม้ว่าฉันจะได้ยินผู้ผลิตเช่น solarflare ผลิตการ์ดเครือข่ายผ่านเคอร์เนลอยู่แล้ว)? สิ่งที่เกี่ยวกับ DMA หรือหน่วยความจำที่ใช้ร่วมกันระหว่างกระบวนการ หากผู้คนสามารถให้ความคิดสั้น ๆ กับฉันฉันสามารถไปและทำวิจัยบน google (คำถามนี้อาจต้องมีคนคุ้นเคยกับการซื้อขายความถี่สูง)
11 c++  c  performance  linux  latency 

8
Java นั้นยากกว่าการ "ปรับแต่ง" เพื่อประสิทธิภาพเมื่อเทียบกับ C / C ++ หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว "ความมหัศจรรย์" ของ JVM ขัดขวางอิทธิพลของโปรแกรมเมอร์ที่มีต่อการปรับให้เหมาะสมขนาดจิ๋วใน Java หรือไม่? ฉันเพิ่งอ่านใน C ++ บางครั้งการเรียงลำดับของข้อมูลสมาชิกสามารถให้การเพิ่มประสิทธิภาพ (ได้รับในสภาพแวดล้อม microsecond) และฉันสันนิษฐานว่ามือของโปรแกรมเมอร์ถูกผูกไว้เมื่อมันมาถึงการบีบประสิทธิภาพจาก Java? ฉันขอขอบคุณอัลกอริทึมที่เหมาะสมให้ความเร็วที่เพิ่มขึ้น แต่เมื่อคุณมีอัลกอริทึมที่ถูกต้องแล้ว Java จะปรับแต่งยากขึ้นเนื่องจากการควบคุม JVM หรือไม่ ถ้าไม่ใช่คนอาจยกตัวอย่างว่าคุณสามารถใช้กลอุบายอะไรใน Java (นอกเหนือจากการคอมไพล์แฟล็กเรียบง่าย)

4
ฮาร์ดไดรฟ์ลูกผสมปรับปรุงประสบการณ์การเขียนโปรแกรมหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันรู้สึกเบื่อหน่ายกับการพัฒนาพีซีของฉันที่เฉื่อยชา เป็น Core2 Duo, 2GB RAM, Seagate ST3500320AS HDD - ไม่ใช่รุ่นท็อป แต่เป็นรุ่นที่ดี โดยทั่วไปแล้วฉันเปิด Visual Studio 2008 หลายชุดแท็บจำนวนมากใน Firefox, Outlook, MSDN, และโปรแกรมที่ฉันดีบั๊กมีขนาดใหญ่มากรวมถึงสิ่งที่ Windows คิดว่ามันไม่สามารถใช้งานได้หากไม่มีฉันเลยจบด้วย Task Manager ที่แสดงบางอย่างเช่น 2 การใช้ไฟล์เพจขนาด 5 GB ซอฟต์แวร์ทั้งหมดที่กล่าวมาข้างต้นกลายเป็นสิ่งที่น่ารำคาญมากจนน่ารำคาญจริงๆ บางอย่างที่ฉันคลิกบนแถบเมนูใน Visual Studio - และแทนที่จะเปิดเมนูมันจะใช้งานฮาร์ดดิสก์ประมาณ 10 วินาที ฉันต้องการที่จะมีเวทมนตร์ …

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