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

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

24
ผลกระทบของประสิทธิภาพการใช้งานอินสแตนซ์ใน Java
ฉันกำลังทำงานกับแอปพลิเคชันและแนวทางการออกแบบหนึ่งวิธีนั้นเกี่ยวข้องกับการใช้งานตัวinstanceofดำเนินการอย่างหนักมาก ในขณะที่ฉันรู้ว่าการออกแบบ OO โดยทั่วไปพยายามหลีกเลี่ยงการใช้instanceofนั่นเป็นเรื่องราวที่แตกต่างและคำถามนี้เกี่ยวข้องกับการแสดงอย่างหมดจด ฉันสงสัยว่ามีผลกระทบต่อประสิทธิภาพการทำงานหรือไม่? เร็วแค่==ไหน? ตัวอย่างเช่นฉันมีคลาสฐานที่มี 10 คลาสย่อย ในฟังก์ชั่นเดียวที่ใช้คลาสพื้นฐานฉันจะตรวจสอบว่าคลาสเป็นอินสแตนซ์ของคลาสย่อยและดำเนินการตามปกติ อีกวิธีหนึ่งที่ฉันคิดว่าการแก้มันคือการใช้จำนวนเต็ม "type id" ดั้งเดิมแทนและใช้ bitmask เพื่อแสดงหมวดหมู่ของคลาสย่อยและจากนั้นก็ทำการเปรียบเทียบรูปแบบบิตของ subclasses "type id" กับ a หน้ากากคงที่เป็นตัวแทนของหมวดหมู่ เป็นที่instanceofที่ดีที่สุดอย่างใดโดย JVM ที่จะได้เร็วขึ้นกว่าที่? ฉันต้องการติดกับ Java แต่ประสิทธิภาพของแอพมีความสำคัญอย่างยิ่ง มันจะเจ๋งถ้ามีคนที่เคยไปตามถนนนี้มาก่อนจะได้รับคำแนะนำ ฉันกำลัง nitpicking มากเกินไปหรือเน้นสิ่งผิดเพื่อเพิ่มประสิทธิภาพหรือไม่

25
ความแตกต่างระหว่างการประกาศตัวแปรก่อนหรือในวง?
ฉันสงสัยอยู่เสมอว่าโดยทั่วไปแล้วการประกาศตัวแปรแบบโยนทิ้งต่อหน้าวงหนึ่งซึ่งต่างจากการวนซ้ำภายในวงทำให้เกิดความแตกต่าง (ประสิทธิภาพ) ไหม? ตัวอย่าง(ค่อนข้างไม่มีจุดหมาย)ใน Java: a)การประกาศก่อนลูป: double intermediateResult; for(int i=0; i < 1000; i++){ intermediateResult = i; System.out.println(intermediateResult); } b)การประกาศ (ซ้ำ) ภายในวง: for(int i=0; i < 1000; i++){ double intermediateResult = i; System.out.println(intermediateResult); } เป็นที่หนึ่งที่ดีกว่าหรือข ? ฉันสงสัยว่าการประกาศตัวแปรซ้ำ (ตัวอย่างb ) สร้างค่าใช้จ่ายมากขึ้นในทางทฤษฎีแต่คอมไพเลอร์นั้นฉลาดพอที่จะไม่สำคัญ ตัวอย่างbมีข้อได้เปรียบของการกระชับและ จำกัด ขอบเขตของตัวแปรที่จะใช้ แต่ฉันก็ยังมีแนวโน้มที่จะรหัสตามตัวอย่าง แก้ไข:ฉันสนใจกรณี Java เป็นพิเศษ

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

14
เป็นเรื่องที่โง่ ๆ ที่ favicon ตัวเล็ก ๆ นั้นต้องการ HTTP อีกอันหรือไม่ ฉันจะใส่ favicon ในเทพดาได้อย่างไร?
โปรดปรานหมดอายุใน 5 วัน คำตอบสำหรับคำถามนี้มีสิทธิ์ได้รับ+100ชื่อเสียง Rouninกำลังมองหาคำตอบจากแหล่งที่เชื่อถือได้ ทุกคนรู้วิธีตั้งค่าลิงค์ favicon.ico ใน HTML: <link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon"> แต่ผมคิดว่ามันเป็นเพียงโง่ที่เล็ก ๆ หลายไบต์ไอคอนที่คุณต้องการเลยร้องขอ HTTP อีก ฉันจึงสงสัยว่าฉันจะทำให้ส่วนภาพของ sprite (เช่นbackground-position=0px -200px;) เป็นไปได้อย่างไรเพื่อเร่งความเร็วและบันทึกคำขอ HTTP ที่มีค่านั้น ฉันจะนำสิ่งนี้ไปเป็นภาพสไปรท์ที่มีโลโก้และงานศิลปะอื่น ๆ ได้อย่างไร หุ่นยนต์ที่ชี้ไปยังfavicon.icoหมายเลขรายการ 31 บนกราฟน้ำตกเป็นสัตว์เลี้ยงของฉัน ZAM เขามักจะมีความสุขมากกว่าและเขาก็มีจุดดีที่ทำให้ฉันรู้ว่าถึงเวลาสำหรับการอัพเกรดความคิดสร้างสรรค์บนเว็บแม้ว่าเขาและฉันจะไม่เห็นด้วยกับชุดของเขาซึ่งฉันคิดว่าวันนี้โง่ไปหน่อย ...

17
ติดตามเวลาการเรียกใช้สคริปต์ใน PHP
PHP ต้องติดตามจำนวนเวลา CPU ที่สคริปต์เฉพาะใช้เพื่อบังคับใช้ขีด จำกัด max_execution_time มีวิธีเข้าถึงสคริปต์นี้ภายในสคริปต์หรือไม่ ฉันต้องการรวมการบันทึกบางอย่างกับการทดสอบของฉันเกี่ยวกับจำนวน CPU ที่ถูกเผาใน PHP จริง (เวลาไม่เพิ่มขึ้นเมื่อสคริปต์กำลังนั่งและรอฐานข้อมูล) ฉันใช้กล่อง Linux
289 php  performance 

3
regex.test VS string.match เพื่อทราบว่าสตริงตรงกับนิพจน์ทั่วไปหรือไม่
หลายครั้งที่ฉันใช้matchฟังก์ชันสตริงเพื่อทราบว่าสตริงตรงกับนิพจน์ทั่วไปหรือไม่ if(str.match(/{regex}/)) มีความแตกต่างระหว่างสิ่งนี้หรือไม่: if (/{regex}/.test(str)) พวกเขาดูเหมือนจะให้ผลลัพธ์เดียวกัน

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

2
ทำไมบางลอย <เปรียบเทียบจำนวนเต็มสี่ครั้งช้ากว่าคนอื่น ๆ ?
เมื่อเปรียบเทียบลอยกับจำนวนเต็มคู่ของค่าบางอย่างใช้เวลานานในการประเมินมากกว่าค่าอื่น ๆ ที่มีขนาดใกล้เคียงกัน ตัวอย่างเช่น: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 แต่ถ้าจำนวนลอยหรือจำนวนเต็มน้อยกว่าหรือใหญ่กว่าการเปรียบเทียบจะทำงานได้เร็วขึ้น: &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 การเปลี่ยนตัวดำเนินการเปรียบเทียบ (เช่นการใช้==หรือ&gt;แทน) จะไม่ส่งผลกระทบต่อเวลาในลักษณะที่สังเกตเห็นได้ สิ่งนี้ไม่ได้เกี่ยวข้องกับขนาดเพียงอย่างเดียวเพราะการเลือกค่าที่มากขึ้นหรือน้อยลงอาจทำให้การเปรียบเทียบเร็วขึ้นดังนั้นฉันจึงสงสัยว่ามันจะลงไปในทางที่โชคร้ายเล็กน้อยที่บิตเรียงกัน เห็นได้ชัดว่าการเปรียบเทียบค่าเหล่านี้เร็วกว่าเพียงพอสำหรับกรณีใช้งานส่วนใหญ่ ฉันแค่อยากรู้ว่าทำไม Python ดูเหมือนจะต่อสู้กับค่าบางคู่มากกว่ากับคนอื่น

15
เท่ากับ (=) กับ LIKE
เมื่อใช้ SQL จะมีประโยชน์ใด ๆ ของการใช้=ในWHEREประโยคแทนLIKE? ไม่มีผู้ประกอบการพิเศษใด ๆLIKEและ=เหมือนกันใช่มั้ย

8
ความแตกต่างด้านประสิทธิภาพระหว่างการดีบั๊กและการปล่อยบิลด์
ฉันต้องยอมรับว่าโดยปกติฉันไม่ได้ใส่ใจกับการสลับระหว่างการกำหนดค่าDebugและReleaseในโปรแกรมของฉันและฉันมักจะเลือกที่จะไปใช้การกำหนดค่าDebugแม้ว่าโปรแกรมจะถูกปรับใช้จริงที่ลูกค้า เท่าที่ฉันทราบความแตกต่างเพียงอย่างเดียวระหว่างการกำหนดค่าเหล่านี้หากคุณไม่เปลี่ยนแปลงด้วยตนเองคือDebugมีDEBUGค่าคงที่ที่กำหนดไว้และReleaseจะมีการตรวจสอบรหัสเพิ่มประสิทธิภาพของ ดังนั้นคำถามของฉันเป็นสองเท่าจริง: มีความแตกต่างด้านประสิทธิภาพอย่างมากระหว่างการกำหนดค่าทั้งสองนี้หรือไม่ มีรหัสประเภทใดที่จะทำให้ประสิทธิภาพแตกต่างกันมากที่นี่หรือที่จริงไม่สำคัญ มีรหัสประเภทใดบ้างที่จะทำงานได้ดีภายใต้การกำหนดค่าDebugที่อาจล้มเหลวภายใต้การกำหนดค่าการปล่อยหรือคุณสามารถแน่ใจได้ว่ารหัสที่ผ่านการทดสอบและทำงานได้ดีภายใต้การกำหนดค่าDebugจะทำงานได้ดีภายใต้

2
จะปลอดภัยหรือไม่ที่จะทำการโคลนนิ่งตื้น ๆ --depth 1 สร้างคอมมิทและดึงการอัพเดตอีกครั้ง?
--depth 1ตัวเลือกในgit clone: สร้างโคลนแบบตื้นที่มีประวัติถูกตัดให้เหลือจำนวนการแก้ไขที่ระบุ พื้นที่เก็บข้อมูลตื้นมีข้อ จำกัด จำนวนมาก (คุณไม่สามารถคัดลอกหรือดึงข้อมูลจากมันหรือผลักดันจากหรือเข้าไปในนั้น) แต่ก็เพียงพอแล้วหากคุณสนใจเพียงประวัติล่าสุดของโครงการขนาดใหญ่ที่มีประวัติยาวนานและต้องการ ส่งเป็นตัวแก้ไข แต่ฉันได้ทำการโคลนแบบโคลนสำเร็จทำการเปลี่ยนแปลงบางอย่างและผลักดันการเปลี่ยนแปลงเหล่านั้นกลับไปยังจุดเริ่มต้น (โคลนเปล่า) มันสมเหตุสมผลสำหรับฉัน - ฉันหมายถึงทำไมไม่ เมื่อ HEAD ที่โคลนสามารถระบุได้ในแหล่งกำเนิดและความมุ่งมั่นของฉันมาเหนือสิ่งนี้ดูเหมือนว่าไม่มีเหตุผล แต่คู่มือบอกว่าเป็นอย่างอื่น ฉันชอบความคิดตื้น ๆ ของโคลน - เช่น drupal core: ไม่มีทางที่ฉันจะต้องรู้ว่าเกิดอะไรขึ้นใน drupal 4 เมื่อฉันเริ่มต้นจาก 7 - แต่ฉันไม่ต้องการยิงตัวเองด้วยการเดินเท้า ดังนั้นปลอดภัยหรือไม่ที่จะทำการโคลนแบบตื้นพัฒนาคอมมิทเข้าไปข้างในแล้วดึงอีกครั้งเพื่อให้ทันกับการอัพเดทจากที่มา?

17
เวลารอมากเมื่อออฟไลน์ฐานข้อมูล SQL Server
ฉันพยายามทำการบำรุงรักษาออฟไลน์ (กู้คืนฐานข้อมูล dev จากการสำรองข้อมูลสด) ในฐานข้อมูล dev ของฉัน แต่คำสั่ง 'ใช้ออฟไลน์' ผ่าน SQL Server Management Studio ทำงานช้ามาก - ตามลำดับ 30 นาทีและตอนนี้ ฉันใกล้ถึงจุดสิ้นสุดแล้วและฉันไม่สามารถหาข้อมูลอ้างอิงออนไลน์ได้ว่าอะไรเป็นสาเหตุของปัญหาความเร็วหรือวิธีการแก้ไข บางไซต์แนะนำว่าการเชื่อมต่อแบบเปิดไปยังฐานข้อมูลทำให้การทำงานช้าลง แต่แอปพลิเคชั่นเดียวที่ใช้ฐานข้อมูลนี้คืออินสแตนซ์ IIS ของเครื่อง dev ของฉันและบริการหยุดทำงาน - ไม่มีการเชื่อมต่อที่เปิดอยู่อีกต่อไป สิ่งที่อาจทำให้เกิดการชะลอตัวนี้และฉันจะทำอย่างไรเพื่อเร่งความเร็ว?

4
เหตุใด Java จึงเปิดสวิตช์ int ที่ต่อเนื่องกันจึงปรากฏว่าทำงานเร็วขึ้นพร้อมกับเคสเพิ่มเติม
ฉันกำลังทำงานกับโค้ด Java บางตัวซึ่งจำเป็นต้องปรับให้เหมาะสมอย่างมากเนื่องจากมันจะทำงานในฟังก์ชั่นฮ็อตที่มีการเรียกใช้หลาย ๆ จุดในลอจิกโปรแกรมหลักของฉัน เป็นส่วนหนึ่งของรหัสนี้เกี่ยวข้องกับการคูณdoubleตัวแปรโดย10ยกพลไม่ใช่เชิงลบint exponents วิธีหนึ่งที่รวดเร็ว (แก้ไข: แต่ไม่ใช่วิธีที่เร็วที่สุดโปรดดูอัปเดตที่ 2 ด้านล่าง) เพื่อรับค่าที่คูณได้switchในexponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... …

10
ฉันเพิ่งค้นพบว่าทำไมเว็บไซต์ ASP.Net ทั้งหมดจึงช้าและฉันพยายามหาว่าจะทำอย่างไรกับมัน
ฉันเพิ่งค้นพบว่าทุกคำขอในเว็บแอปพลิเคชัน ASP.Net จะได้รับการล็อคเซสชันที่จุดเริ่มต้นของคำขอจากนั้นปล่อยเมื่อสิ้นสุดคำขอ! ในกรณีที่ความหมายของสิ่งนี้หายไปกับคุณเช่นเดียวกับฉันในตอนแรกสิ่งนี้ก็หมายถึงสิ่งต่อไปนี้: เมื่อใดก็ตามที่หน้าเว็บ ASP.Net ใช้เวลาโหลดนาน (อาจเป็นเพราะการโทรฐานข้อมูลที่ช้าหรืออะไรก็ตาม) และผู้ใช้ตัดสินใจว่าพวกเขาต้องการนำทางไปยังหน้าอื่นเพราะพวกเขาเบื่อที่จะรอพวกเขาไม่สามารถ! การล็อกเซสชัน ASP.Net บังคับให้มีการร้องขอหน้าใหม่เพื่อรอจนกว่าคำขอเดิมจะเสร็จสิ้นการโหลดช้าลงอย่างเจ็บปวด Arrrgh เมื่อใดก็ตามที่ UpdatePanel โหลดช้าและผู้ใช้ตัดสินใจที่จะนำทางไปยังหน้าอื่นก่อนที่ UpdatePanel จะอัปเดตเสร็จสิ้น ... พวกเขาไม่สามารถ! การล็อคเซสชันของ ASP.net บังคับให้คำขอหน้าใหม่รอจนกว่าคำขอเดิมจะเสร็จสิ้นการโหลดช้าลงอย่างเจ็บปวด Double Arrrgh! ดังนั้นตัวเลือกคืออะไร จนถึงตอนนี้ฉันก็เกิดขึ้นกับ: ใช้ Custom SessionStateDataStore ซึ่ง ASP.Net รองรับ ฉันไม่ได้พบมากที่นั่นเพื่อคัดลอกและดูเหมือนว่ามีความเสี่ยงสูงและง่ายต่อการเลอะ ติดตามคำขอทั้งหมดที่อยู่ระหว่างดำเนินการและหากมีคำขอมาจากผู้ใช้รายเดียวกันให้ยกเลิกคำขอเดิม ดูเหมือนจะสุดขีด แต่มันก็ใช้งานได้ อย่าใช้เซสชัน! เมื่อฉันต้องการสถานะบางอย่างสำหรับผู้ใช้ฉันก็สามารถใช้ Cache แทนและรายการสำคัญในชื่อผู้ใช้รับรองความถูกต้องหรือบางสิ่ง ดูเหมือนจะสุดโต่งอีกครั้ง ฉันไม่อยากจะเชื่อเลยว่าทีม ASP.Net Microsoft จะทิ้งคอขวดที่มีประสิทธิภาพอย่างมากในเฟรมเวิร์กในเวอร์ชัน 4.0! ฉันขาดอะไรที่ชัดเจนหรือไม่ การใช้คอลเลกชัน ThreadSafe …

2
ทำไม 'x' in ('x',) เร็วกว่า 'x' == 'x'
&gt;&gt;&gt; timeit.timeit("'x' in ('x',)") 0.04869917374131205 &gt;&gt;&gt; timeit.timeit("'x' == 'x'") 0.06144205736110564 ใช้ได้กับสิ่งอันดับด้วยหลายองค์ประกอบทั้งสองเวอร์ชันดูเหมือนจะเติบโตเป็นเส้นตรง: &gt;&gt;&gt; timeit.timeit("'x' in ('x', 'y')") 0.04866674801541748 &gt;&gt;&gt; timeit.timeit("'x' == 'x' or 'x' == 'y'") 0.06565782838087131 &gt;&gt;&gt; timeit.timeit("'x' in ('y', 'x')") 0.08975995576448526 &gt;&gt;&gt; timeit.timeit("'x' == 'y' or 'x' == 'y'") 0.12992391047427532 จากนี้ผมคิดว่าผมควรจะโดยสิ้นเชิงเริ่มใช้inทุกแทน==!

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