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

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

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

4
Data Oriented Design - ทำไม่ได้กับสมาชิกมากกว่า 1-2 โครงสร้าง?
ตัวอย่างปกติของ Data Oriented Design ที่มีโครงสร้าง Ball: struct Ball { float Radius; float XYZ[3]; }; แล้วพวกเขาก็สร้างอัลกอริทึมที่วนซ้ำstd::vector<Ball>เวกเตอร์ จากนั้นพวกเขาก็ให้สิ่งเดียวกัน แต่นำไปใช้ใน Data Oriented Design: struct Balls { std::vector<float> Radiuses; std::vector<XYZ[3]> XYZs; }; ซึ่งเป็นสิ่งที่ดีและทั้งหมดถ้าคุณจะทำซ้ำรัศมีทั้งหมดก่อนอื่นจากนั้นทุกตำแหน่งและอื่น ๆ อย่างไรก็ตามคุณจะย้ายลูกบอลในเวกเตอร์ได้อย่างไร ในรุ่นเดิมหากคุณมีstd::vector<Ball> BallsAllคุณก็สามารถย้ายใดๆBallsAll[x]BallsAll[y] อย่างไรก็ตามในการทำเช่นนั้นสำหรับ Data Oriented เวอร์ชั่นคุณต้องทำสิ่งเดียวกันสำหรับทุก ๆ คุณสมบัติ (2 ครั้งในกรณีของ Ball - radius and position) แต่มันจะแย่ลงถ้าคุณมีคุณสมบัติมากขึ้น คุณจะต้องเก็บดัชนีสำหรับ "ลูกบอล" แต่ละลูกและเมื่อคุณพยายามที่จะย้ายไปรอบ …

7
เป็นจริงหรือไม่ที่จะใช้ประโยชน์จากที่จัดเก็บในตัว HTML5 เพื่อจัดเก็บ CSS และ JavaScript
แนวคิดคือการใช้ประโยชน์จากที่จัดเก็บในตัว HTML5 เพื่อจัดเก็บ CSS และ JavaScript ที่เข้าถึงบ่อย ตัวอย่างเช่น (หลอกรหัส): var load_from_cdn = true; ถ้า (ตรวจจับที่จัดเก็บในตัวเครื่อง) { ถ้า (แคชของ css พบ js) { โหลดแคชหน่วยเก็บข้อมูลภายใน load_from_cdn = false; } } ถ้า (load_from_cdn) { document.write ( '<script> ...'); } เป็นไปได้หรือเป็นจริง? ฉันรู้แคชของเบราว์เซอร์จะยังคงมีการตรวจสอบการเข้าถึงส่วนหัวบางอย่าง ฉันสมมติว่าไม่มีการเข้าถึง HTTP จะดีกว่า (ในความคิดของฉัน) PS: ดูเหมือนว่าที่จัดเก็บในตัวเครื่องรองรับเฉพาะคู่ค่าคีย์บางคนสามารถพิสูจน์ได้หรือไม่ (ดีที่สุดกับตัวอย่างบางส่วน)

5
การส่งผ่านข้อโต้แย้งเป็นการอ้างอิง const การเพิ่มประสิทธิภาพก่อนกำหนดหรือไม่
"การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด" ฉันคิดว่าสิ่งนี้เราทุกคนสามารถตกลงกันได้ และฉันพยายามอย่างหนักเพื่อหลีกเลี่ยงการทำเช่นนั้น แต่เมื่อเร็ว ๆ นี้ผมได้รับการสงสัยเกี่ยวกับการปฏิบัติของพารามิเตอร์ผ่านโดยอ้างอิง constแทนโดยราคา ฉันได้รับการสอน / เรียนรู้ว่าการโต้แย้งฟังก์ชั่นที่ไม่สำคัญ (เช่นประเภทที่ไม่ใช่แบบดั้งเดิม) ควรจะถูกส่งผ่านโดยการอ้างอิง const - หนังสือบางเล่มที่ฉันได้อ่านแนะนำว่านี่เป็น "แนวปฏิบัติที่ดีที่สุด" ถึงกระนั้นฉันก็อดไม่ได้ที่จะสงสัย: คอมไพเลอร์สมัยใหม่และคุณสมบัติภาษาใหม่สามารถทำงานได้อย่างน่าอัศจรรย์ดังนั้นความรู้ที่ฉันได้เรียนรู้อาจล้าสมัยไปแล้วและฉันไม่เคยใส่ใจในโปรไฟล์เลยหากมีความแตกต่างระหว่างประสิทธิภาพ void fooByValue(SomeDataStruct data); และ void fooByReference(const SomeDataStruct& data); เป็นวิธีปฏิบัติที่ฉันได้เรียนรู้ - ผ่านการอ้างอิง const (โดยค่าเริ่มต้นสำหรับประเภทที่ไม่สำคัญ) - การเพิ่มประสิทธิภาพก่อนวัยอันควร?

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

11
คอมไพเลอร์ C ++ เอาวงเล็บที่ไม่มีประโยชน์ออกหรือไม่
รหัสจะ int a = ((1 + 2) + 3); // Easy to read ทำงานช้ากว่า int a = 1 + 2 + 3; // (Barely) Not quite so easy to read หรือคอมไพเลอร์สมัยใหม่ฉลาดพอที่จะลบ / ปรับวงเล็บ "ไร้ประโยชน์" ดูเหมือนว่าจะเป็นข้อกังวลในการเพิ่มประสิทธิภาพเล็ก ๆ น้อย ๆ แต่การเลือก C ++ มากกว่า C # / Java / ... นั้นเกี่ยวกับการปรับให้เหมาะสมที่สุด (IMHO)

6
ฟังก์ชันแบบอินไลน์ใน C ++ ประเด็นคืออะไร?
ตามสิ่งที่ฉันอ่านคอมไพเลอร์ไม่จำเป็นต้องแทนที่การเรียกใช้ฟังก์ชันของฟังก์ชันอินไลน์ด้วยร่างกาย แต่จะทำเช่นนั้นหากทำได้ นี่ทำให้ฉันคิด - ทำไมเราถึงมีคำอินไลน์ถ้าเป็นเช่นนั้น? ทำไมไม่ทำฟังก์ชั่นอินไลน์ฟังก์ชั่นทั้งหมดโดยค่าเริ่มต้นและให้คอมไพเลอร์คิดว่ามันสามารถทดแทนการโทรด้วยร่างกายฟังก์ชั่นหรือไม่?

18
คุณทำอะไรให้เหมาะสม [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา โดยทั่วไปแล้วการเพิ่มประสิทธิภาพประเภทใดที่คุณมักใช้ในการออกแบบซอฟต์แวร์ คุณเป็นประเภทที่ชอบเพิ่มประสิทธิภาพการออกแบบของคุณหรือไม่ เวลาในการพัฒนา (เช่นเขียนอย่างรวดเร็วและ / หรือง่ายต่อการบำรุงรักษา)? ระยะเวลาดำเนินการ พื้นที่เก็บข้อมูล (RAM, DB, Disc, ฯลฯ ) แน่นอนว่านี่เป็นเรื่องของประเภทของปัญหาที่ต้องแก้ไขและกำหนดเวลาที่เกี่ยวข้องดังนั้นฉันอยากได้ยินเกี่ยวกับสาเหตุที่ทำให้คุณเลือกการเพิ่มประสิทธิภาพหนึ่งรูปแบบ

3
ฉันจะสำรวจต้นไม้โดยไม่ใช้การเรียกซ้ำได้อย่างไร
ฉันมีขนาดใหญ่มากในทรีโหนดหน่วยความจำและจำเป็นต้องสำรวจทรี การส่งค่าที่ส่งคืนของโหนดชายด์แต่ละโหนดไปยังโหนดพาเรนต์ สิ่งนี้จะต้องทำจนกว่าโหนดทั้งหมดจะมีบับเบิลข้อมูลจนถึงรูตโหนด การสำรวจเส้นทางทำงานเช่นนี้ private Data Execute(Node pNode) { Data[] values = new Data[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // recursive } return pNode.Process(values); } public void Start(Node pRoot) { Data result = Execute(pRoot); } ใช้งานได้ดี แต่ฉันกังวลว่า call call จะ จำกัด ขนาดของทรีโหนด วิธีการสามารถรหัสถูกเขียนใหม่เพื่อให้ไม่มีการโทร recursive จะExecuteทำ?
19 c#  optimization  trees 

3
วิธีทดสอบและปรับให้เหมาะสมเมื่อคุณไม่สามารถสร้างสภาพแวดล้อมได้
เมื่อก่อนฉันเคยทำงานในสภาพแวดล้อมที่หลากหลาย แอปเดสก์ท็อปเกมสิ่งฝังตัวบริการเว็บงานบรรทัดคำสั่งเว็บไซต์การรายงานฐานข้อมูลและอื่น ๆ สภาพแวดล้อมทั้งหมดเหล่านี้มีลักษณะเหมือนกัน: ไม่ว่าจะมีความซับซ้อนไม่ว่าจะมีขนาดเท่าใดก็ตามฉันสามารถมีส่วนย่อยหรือส่วนแบ่งของแอปพลิเคชั่นบนเครื่องของฉันหรือในสภาพแวดล้อมการพัฒนาเพื่อทดสอบ วันนี้ฉันทำไม่ได้ วันนี้ฉันพบว่าตัวเองอยู่ในสภาพแวดล้อมที่มุ่งเน้นไปที่การปรับขนาดได้ การทำซ้ำสภาพแวดล้อมนั้นมีค่าใช้จ่ายสูง การแบ่งส่วนของสภาพแวดล้อมในขณะที่มีความน่าเชื่อถือ (บางส่วนจะต้องมีการจำลองหรือใช้ในโหมดอินสแตนซ์เดียวที่พวกเขาไม่ได้ทำ), เอาชนะวัตถุประสงค์เพราะมันบดบังความพร้อมกันและการโหลดที่ พบกับระบบจริง แม้แต่ระบบทดสอบขนาดเล็กก็ยังมีข้อบกพร่องอยู่ สิ่งต่าง ๆ จะทำงานแตกต่างกันเมื่อคุณมี 2 โหนดและเมื่อคุณมี 64 โหนด วิธีการปรับให้เหมาะสมตามปกติของฉัน (การวัดลองบางอย่างตรวจสอบความถูกต้องวัดความแตกต่างทำซ้ำ) ไม่ได้ทำงานที่นี่จริง ๆ เพราะฉันไม่สามารถทำตามขั้นตอนที่ 2 และ 3 ได้อย่างมีประสิทธิภาพสำหรับส่วนต่าง ๆ ของปัญหา โหลด) สถานการณ์นี้ดูเหมือนจะไม่ซ้ำกัน อะไรคือวิธีการทั่วไปในการทำงานประเภทนี้ในสภาพแวดล้อมแบบนี้? มีคำถามที่เกี่ยวข้อง: นี้คำถามได้จะทำอย่างไรกับฮาร์ดแวร์ (เช่นวิเคราะห์สเปกตรัม) เป็นไม่พร้อมใช้งานซึ่งสามารถ (ค่อนข้าง) เทิดทูนอย่างง่ายดาย นี้เป็นคำถามเกี่ยวกับการติดตามลงโรคจิตเท่านั้นที่อยู่ในสภาพแวดล้อมการผลิตซึ่งเป็นประโยชน์ - แต่การจัดเรียงที่แตกต่างกันของกิจกรรม

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

2
อัลกอริทึมสำหรับการค้นหาแท็กที่รวดเร็ว
ปัญหาดังต่อไปนี้ มีชุดเอนทิตี้เรียบง่าย E แต่ละชุดมีแท็ก T ติดอยู่ แต่ละเอนทิตีอาจมีแท็กจำนวนเท่าใดก็ได้ จำนวนเอนทิตีทั้งหมดอยู่ใกล้ 100 ล้านและจำนวนแท็กทั้งหมดประมาณ 5000 ดังนั้นข้อมูลเริ่มต้นจะเป็นดังนี้: E1 - T1, T2, T3, ... Tn E2 - T1, T5, T100, ... Tk .. Ez - T10, T12, ... Tl ข้อมูลเริ่มต้นนี้มีการปรับปรุงค่อนข้างน้อย แอพของฉันสร้างนิพจน์เชิงตรรกะบนแท็กเช่นนี้: T1 & T2 & T3 | (T5 &! T6) สิ่งที่ฉันต้องการคือการคำนวณจำนวนเอนทิตีที่ตรงกับนิพจน์ที่กำหนด (หมายเหตุ - ไม่ใช่เอนทิตี แต่เป็นเพียงตัวเลข) อันนี้อาจไม่ถูกต้องแน่นอน …

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

6
การจัดเรียงหน่วยความจำมีความสำคัญแค่ไหน? มันยังคงเป็นเรื่องสำคัญหรือไม่
จากช่วงเวลานี้ฉันได้ค้นหาและอ่านมากเกี่ยวกับการจัดตำแหน่งหน่วยความจำวิธีการทำงานและวิธีการใช้งาน บทความที่เกี่ยวข้องมากที่สุดที่ฉันได้พบในขณะนี้คือคนนี้ แต่ถึงอย่างนั้นฉันก็ยังมีคำถามบางอย่างเกี่ยวกับเรื่องนี้: ออกจากระบบฝังตัวเรามักจะมีหน่วยความจำขนาดใหญ่ในคอมพิวเตอร์ของเราที่ทำให้การจัดการหน่วยความจำน้อยลงมากฉันทำการปรับให้เหมาะสม แต่ตอนนี้มันเป็นสิ่งที่สามารถสร้างความแตกต่างได้ถ้าเราเปรียบเทียบโปรแกรมเดียวกันกับหรือ ไม่มีหน่วยความจำที่จัดเรียงใหม่และจัดตำแหน่ง? การจัดตำแหน่งหน่วยความจำมีข้อดีอื่น ๆ หรือไม่? ฉันอ่านบางแห่งว่า CPU ทำงานได้ดีขึ้น / เร็วขึ้นด้วยหน่วยความจำที่จัดเรียงเพราะใช้คำสั่งในการประมวลผลน้อยกว่า (หากคุณมีลิงค์สำหรับบทความ / เกณฑ์มาตรฐานเกี่ยวกับเรื่องนี้?) ในกรณีนี้ มีข้อดีมากกว่าสองอย่างนี้ไหม? ในลิงค์บทความที่บทที่ 5 ผู้เขียนพูดว่า: ระวัง: ใน C ++ คลาสที่ดูเหมือนว่า structs อาจผิดกฎนี้! (ไม่ว่าพวกเขาจะทำหรือไม่ขึ้นอยู่กับว่าคลาสพื้นฐานและฟังก์ชั่นสมาชิกเสมือนมีการใช้งานอย่างไรและแตกต่างกันตามคอมไพเลอร์) บทความส่วนใหญ่พูดคุยเกี่ยวกับโครงสร้าง แต่การประกาศตัวแปรท้องถิ่นได้รับผลกระทบจากความต้องการนี้เช่นกัน? คุณเคยคิดบ้างไหมว่าการจัดเรียงหน่วยความจำทำงานอย่างไรใน C ++ เนื่องจากดูเหมือนว่าจะมีความแตกต่างบ้างไหม? คำถามเดิมนี้มีคำว่า "การจัดตำแหน่ง" แต่ไม่ได้ให้คำตอบสำหรับคำถามข้างต้น

5
วิธีการที่มีประสิทธิภาพสำหรับการจัดเก็บวัตถุนับสิบล้านเพื่อการสืบค้นด้วยการแทรกจำนวนมากต่อวินาที?
นี่เป็นแอปพลิเคชั่นบันทึก / นับที่นับจำนวนแพ็กเก็ตและการนับประเภทของแพ็คเก็ต ฯลฯ ในเครือข่ายการแชท p2p ซึ่งเท่ากับประมาณ 4-6 ล้านแพ็กเก็ตในระยะเวลา 5 นาที และเนื่องจากฉันใช้เพียงแค่ "ภาพรวม" ของข้อมูลนี้ฉันจึงลบแพ็กเก็ตที่เก่ากว่า 5 นาทีทุกห้านาที ดังนั้นจำนวนสูงสุดของไอเท็มที่จะอยู่ในคอลเล็กชันนี้คือ 10 ถึง 12 ล้าน เนื่องจากฉันต้องทำการเชื่อมต่อ 300 กับ superpeers ที่แตกต่างกันจึงเป็นไปได้ที่แต่ละแพ็กเก็ตจะพยายามแทรกอย่างน้อย 300 ครั้ง (ซึ่งอาจเป็นเหตุผลว่าทำไมการเก็บข้อมูลนี้ไว้ในหน่วยความจำจึงเป็นตัวเลือกที่สมเหตุสมผลเท่านั้น) ปัจจุบันฉันใช้พจนานุกรมเพื่อจัดเก็บข้อมูลนี้ แต่เนื่องจากรายการจำนวนมากที่ฉันพยายามจัดเก็บฉันจึงพบปัญหากับกองวัตถุขนาดใหญ่และปริมาณการใช้หน่วยความจำเติบโตอย่างต่อเนื่องตลอดเวลา Dictionary<ulong, Packet> public class Packet { public ushort RequesterPort; public bool IsSearch; public string SearchText; public bool Flagged; public …

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