ระบุปัญหาคอขวดด้านประสิทธิภาพโดยใช้โหมดถามของ GitHub Copilot
การระบุปัญหาคอขวดด้านประสิทธิภาพที่สามารถและควรปรับให้เหมาะสมนั้นไม่ใช่เรื่องง่ายเสมอไป การวางแผนวิธีปรับโครงสร้างโค้ดของคุณเพื่อประสิทธิภาพที่ดีขึ้นอาจเป็นเรื่องยากยิ่งขึ้น
นักพัฒนาสามารถใช้โหมดถามของ GitHub Copilot เพื่อระบุปัญหาคอขวดด้านประสิทธิภาพและวางแผนกลยุทธ์การเพิ่มประสิทธิภาพเพื่อปรับปรุงประสิทธิภาพของโค้ด
โหมดถามคืออะไร
โหมดถามของ GitHub Copilot เป็นอินเทอร์เฟซการสนทนา คุณถามคําถามและตอบ GitHub Copilot โดยใช้บริบทที่คุณให้ไว้ มันเหมือนกับการมีเพื่อนร่วมงานที่มีความรู้ที่สามารถอ่านโค้ดของคุณและให้คําแนะนําด้านประสิทธิภาพได้ ตัวอย่างเช่น คุณสามารถใช้โหมดถามเพื่ออธิบายว่าฟังก์ชันทําอะไร ระบุปัญหาคอขวดด้านประสิทธิภาพที่อาจเกิดขึ้น หรือแนะนํากลยุทธ์การเพิ่มประสิทธิภาพ
โหมดถามจะตอบกลับด้วยคําอธิบาย ข้อมูลเชิงลึก หรือตัวอย่างโค้ดที่คุณสามารถใช้เพื่อปรับปรุงประสิทธิภาพของโค้ดของคุณ ในโหมดถาม GitHub Copilot จะไม่ทําการเปลี่ยนแปลงใดๆ กับไฟล์โค้ดของคุณ
วิเคราะห์ปัญหาคอขวดด้านประสิทธิภาพโดยใช้โหมดถาม
คุณสามารถใช้โหมดถามเพื่อระบุและวิเคราะห์ปัญหาคอขวดด้านประสิทธิภาพในโค้ดของคุณ GitHub Copilot สามารถช่วยให้คุณเข้าใจลักษณะการทํางาน ระบุปัญหาที่อาจเกิดขึ้น และประเมินโอกาสในการเพิ่มประสิทธิภาพ
กลยุทธ์ในการวิเคราะห์ปัญหาคอขวดด้านประสิทธิภาพ
ต่อไปนี้เป็นกลยุทธ์บางส่วนสําหรับการใช้โหมดถามเพื่อวิเคราะห์ปัญหาคอขวดด้านประสิทธิภาพ
อธิบายโค้ด: ขอให้ GitHub Copilot อธิบายว่าโค้ดที่มีความสําคัญต่อประสิทธิภาพทําอะไร คําถามนี้ช่วยให้แน่ใจว่าคุณเข้าใจตรรกะปัจจุบันก่อนที่จะทําการเพิ่มประสิทธิภาพ
ระบุความไร้ประสิทธิภาพ: ขอให้ GitHub Copilot ระบุว่าส่วนใดของโค้ดที่ทําให้เกิดปัญหาด้านประสิทธิภาพ คําถามนี้สามารถช่วยคุณระบุจุดที่ต้องโฟกัสได้
ค้นหาปัญหาอัลกอริทึม: ขอให้ GitHub Copilot ระบุความไร้ประสิทธิภาพของอัลกอริทึมหรือปัญหาความซับซ้อนในโค้ด คําถามนี้สามารถช่วยให้คุณเข้าใจความซับซ้อนของเวลาและพื้นที่
แนะนําการเพิ่มประสิทธิภาพ: ขอคําแนะนําจาก GitHub Copilot เกี่ยวกับวิธีเพิ่มประสิทธิภาพหรือปรับโครงสร้างโค้ดที่มีความสําคัญต่อประสิทธิภาพใหม่ GitHub Copilot อาจแนะนําให้ใช้โครงสร้างข้อมูล การแคช หรือเทคนิคอื่นๆ ที่ดีขึ้นเพื่อปรับปรุงประสิทธิภาพ
ขอตัวอย่าง: หากคุณไม่แน่ใจว่าจะใช้คําแนะนําอย่างไร ให้สอบถามตัวอย่างโค้ดจาก GitHub Copilot คําถามนี้สามารถช่วยให้คุณเข้าใจวิธีใช้คําแนะนําในบริบทเฉพาะของคุณ
สํารวจความเสี่ยง: สอบถาม GitHub Copilot เกี่ยวกับความเสี่ยงที่อาจเกิดขึ้นหรือผลข้างเคียงของการเพิ่มประสิทธิภาพโค้ด คําถามนี้สามารถช่วยคุณหลีกเลี่ยงการแนะนําข้อบกพร่องใหม่หรือช่องโหว่ด้านความปลอดภัย
ทําซ้ํา: ใช้คําถามติดตามผลเพื่อเจาะลึกคําแนะนําเฉพาะหรือประเด็นที่น่ากังวล วิธีการวนซ้ําสามารถช่วยคุณปรับแต่งความเข้าใจและวางแผนแนวทางการเพิ่มประสิทธิภาพได้อย่างมีประสิทธิภาพมากขึ้น
โหมดถามพร้อมท์สําหรับการวิเคราะห์ประสิทธิภาพ
ข้อความแจ้งที่คุณใช้เพื่อวิเคราะห์ปัญหาคอขวดด้านประสิทธิภาพควรสะท้อนถึงโค้ดและเป้าหมายเฉพาะของคุณ อย่างไรก็ตาม ต่อไปนี้เป็นแนวทางปฏิบัติที่ดีที่สุดที่ควรพิจารณา:
- มุ่งเน้นไปที่เทคนิคการวิเคราะห์ที่เฉพาะเจาะจงมากกว่าการขอความช่วยเหลือทั่วไป
- อ้างอิงแนวทางปฏิบัติที่กําหนดไว้ เช่น ความซับซ้อนของอัลกอริทึม กลยุทธ์การแคช และรูปแบบประสิทธิภาพ
- รวมตัวชี้วัดประสิทธิภาพ เช่น ความซับซ้อนของเวลา การใช้หน่วยความจํา และการพิจารณาปริมาณงาน
- เน้นการทดสอบและการวัดผล ซึ่งมีความสําคัญต่อการตรวจสอบการปรับปรุงประสิทธิภาพ
- ส่งเสริมแนวทางปฏิบัติที่ดีที่สุดสําหรับโค้ดที่ปลอดภัย บํารุงรักษาได้ และมีประสิทธิภาพ
- ส่งเสริมการคิดอย่างเป็นระบบเกี่ยวกับข้อกําหนดด้านประสิทธิภาพและการนําไปใช้ทางเทคนิค
- หากมี ให้จัดการกับข้อควรพิจารณาด้านความสามารถในการปรับขนาดที่สําคัญสําหรับโค้ดการผลิต
สร้างบริบทการแชทที่จําเป็น
เมื่อใช้โหมดถาม สิ่งสําคัญคือต้องจัดเตรียมบริบทที่เพียงพอสําหรับ GitHub Copilot เพื่อทําความเข้าใจโค้ดที่คุณกําลังวิเคราะห์ เคล็ดลับบางประการมีดังนี้:
- ใช้ปุ่มเพิ่ม บริบท ในอินเทอร์เฟซการแชทเพื่อรวมไฟล์หรือโฟลเดอร์ที่เกี่ยวข้องจากฐานรหัสของคุณ
- รวมข้อมูลโค้ดที่เกี่ยวข้องหรือตัวอย่างที่แสดงให้เห็นถึงข้อกังวลด้านประสิทธิภาพของคุณ
- อธิบายเป้าหมายเฉพาะที่คุณมีสําหรับการวิเคราะห์ (เช่น การลดเวลาแฝง การปรับปรุงปริมาณงาน)
- กล่าวถึงข้อจํากัดหรือข้อกําหนดใดๆ ที่สําคัญสําหรับการวิเคราะห์ (ตัวอย่างเช่น ข้อจํากัดของหน่วยความจํา ข้อกําหนดความสามารถในการปรับขนาด)
ต่อไปนี้คือตัวอย่างบางส่วนของข้อความภาษาธรรมชาติที่คุณสามารถรวมไว้ในพร้อมท์ของคุณเมื่อวิเคราะห์ปัญหาคอขวดด้านประสิทธิภาพการทํางาน:
ความเข้าใจและการวิเคราะห์
- "วิเคราะห์โค้ดที่เลือกและอธิบายว่าปัญหาคอขวดด้านประสิทธิภาพใดที่อาจมีอยู่"
- "ความซับซ้อนของเวลาของอัลกอริทึมที่เลือกคืออะไร และเพราะเหตุใด"
- "ตรวจสอบรหัสที่เลือกและระบุข้อกังวลด้านประสิทธิภาพหลักและผลกระทบ"
- "รูปแบบการใช้หน่วยความจําในโค้ดที่เลือกคืออะไร และจะปรับให้เหมาะสมได้อย่างไร"
การประเมินผลการปฏิบัติงาน
- "ประเมินโค้ดที่เลือกสําหรับปัญหาความสามารถในการปรับขนาดที่อาจเกิดขึ้น"
- "มีรูปแบบต่อต้านประสิทธิภาพหรือความไร้ประสิทธิภาพในโค้ดที่เลือกหรือไม่"
- "ตรวจสอบโค้ดที่เลือกและระบุพื้นที่ที่การแคชสามารถปรับปรุงประสิทธิภาพได้"
- "โค้ดที่เลือกเป็นไปตามแนวทางปฏิบัติที่ดีที่สุดด้านประสิทธิภาพหรือไม่ ถ้าไม่ จะปรับปรุงได้อย่างไร"
โอกาสในการปรับให้เหมาะสม
- "แนะนําเทคนิคการเพิ่มประสิทธิภาพเฉพาะเพื่อปรับปรุงประสิทธิภาพของโค้ดที่เลือก (การแคช อัลกอริทึมที่ดีขึ้นโครงสร้างข้อมูล ฯลฯ)"
- "ฉันจะลดความซับซ้อนของเวลาของอัลกอริทึมที่เลือกได้อย่างไร"
- "รูปแบบการออกแบบใดที่สามารถช่วยปรับปรุงประสิทธิภาพของโค้ดที่เลือกได้"
- "แสดงวิธีใช้การประมวลผลแบบอะซิงโครนัสกับการดําเนินการที่มีความสําคัญต่อประสิทธิภาพที่เลือก"
การทดสอบและการวัด
- "ฉันควรวัดเมตริกประสิทธิภาพใดเพื่อตรวจสอบการปรับปรุงโค้ดที่เลือก"
- "ความเสี่ยงของการเพิ่มประสิทธิภาพโค้ดที่เลือกคืออะไร และฉันจะบรรเทาความเสี่ยงเหล่านั้นได้อย่างไร"
- "ฉันจะตรวจสอบได้อย่างไรว่าโค้ดที่ปรับให้เหมาะสมยังคงมีฟังก์ชันการทํางานเหมือนกับต้นฉบับ"
- "ตรวจสอบวิธีการที่แนะนําสําหรับการเพิ่มประสิทธิภาพโค้ดที่เลือก อะไรคือการแลกเปลี่ยนที่เกี่ยวข้องกับแต่ละแนวทาง"
การประยุกต์ใช้แนวทางปฏิบัติที่ดีที่สุด
- "โค้ดที่เลือกเป็นไปตามแนวทางประสิทธิภาพ C# ของ Microsoft หรือไม่ จําเป็นต้องปรับปรุงอะไรบ้าง"
- "ฉันจะทําให้โค้ดที่เลือกมีประสิทธิภาพมากขึ้นในขณะที่ยังคงความสามารถในการอ่านได้อย่างไร"
- "อะไรคือผลกระทบด้านความปลอดภัยของการเพิ่มประสิทธิภาพที่แนะนํา"
- "ฉันจะแน่ใจได้อย่างไรว่าการปรับปรุงประสิทธิภาพจะไม่ทําให้เกิดปัญหาการเธรดหรือการทํางานพร้อมกัน"
เวิร์กโฟลว์การวิเคราะห์ประสิทธิภาพ
เวิร์กโฟลว์ต่อไปนี้สาธิตวิธีการใช้โหมดถามบนโค้ดที่มีความสําคัญต่อประสิทธิภาพการทํางาน:
เปิดรหัสที่มีปัญหา
นําทางไปยังไฟล์และฟังก์ชันที่มีคอขวดด้านประสิทธิภาพที่คุณต้องการปรับให้เหมาะสม ตัวอย่างเช่น สมมติว่าคุณมีวิธีการ
ProcessOrders()ที่การแสดงโปรไฟล์ใช้เวลามากเกินไปเลือกรหัสที่เกี่ยวข้อง
การเลือกบล็อกโค้ดเฉพาะ (เช่น วิธีการหรือลูปที่มีความสําคัญต่อประสิทธิภาพ) คุณจะให้ Copilot โฟกัสที่ชัดเจน Copilot ใช้การเลือกนี้เป็นบริบทสําหรับการตอบ
ขอคําอธิบายรหัส
เริ่มต้นง่ายๆ ตัวอย่างเช่น:
"Copilot คุณช่วยอธิบายได้
ProcessOrdersไหมว่าวิธีนี้ทําอะไรและระบุข้อกังวลด้านประสิทธิภาพได้ไหม"ในโหมดถาม Copilot จะอ่านโค้ดและสร้างคําอธิบายเป็นภาษาอังกฤษธรรมดา ขั้นตอนนี้มีประโยชน์เพื่อให้แน่ใจว่าคุณ (และ GitHub Copilot) เข้าใจตรรกะปัจจุบันอย่างถ่องแท้ก่อนที่จะปรับให้เหมาะสม คําอธิบายอาจกลับมาเช่น:
"วิธีนี้ประมวลผลรายการคําสั่งซื้อโดยการทําซ้ําในแต่ละคําสั่งซื้อและทําการเรียกฐานข้อมูลแต่ละรายการเพื่อดึงข้อมูลผลิตภัณฑ์ กระบวนการนี้สร้างปัญหาคิวรี N+1 ที่คุณสร้างคิวรีหนึ่งรายการเพื่อรับคําสั่งซื้อ จากนั้นคิวรีเพิ่มเติม N สําหรับแต่ละผลิตภัณฑ์ รูปแบบนี้อาจช้ามากเมื่อประมวลผลคําสั่งซื้อจํานวนมาก..."
ใช้คําอธิบายเพื่อยืนยันเจตนาของโค้ดและระบุปัญหาคอขวดด้านประสิทธิภาพ
ถามคําถามที่แหลมคมเกี่ยวกับประสิทธิภาพ
ตอนนี้คุณสามารถวิเคราะห์ได้ ตัวอย่างเช่น:
- "ความซับซ้อนของเวลาของอัลกอริทึมนี้คืออะไร และปรับขนาดอย่างไร"
- "ส่วนใดของรหัสนี้น่าจะทําให้เกิดปัญหาคอขวดด้านประสิทธิภาพ"
- "มีการดําเนินการซ้ําซ้อนหรือรูปแบบที่ไม่มีประสิทธิภาพที่นี่หรือไม่"
ใช้การตอบกลับของ GitHub Copilot เพื่อระบุโอกาสในการเพิ่มประสิทธิภาพ เช่น:
"ลูปที่ซ้อนกันสร้างความซับซ้อนของ O(n²) และการเรียกฐานข้อมูลภายในลูปจะสร้างปัญหาการสืบค้น N+1 การต่อสตริงในลูปยังสร้างการจัดสรรหน่วยความจําที่ไม่จําเป็น"
ใช้คําติชมเพื่อทําการวิเคราะห์ต่อ
ขอคําแนะนําการเพิ่มประสิทธิภาพ
ตอนนี้คําถามสําคัญ:
"ฉันจะเพิ่มประสิทธิภาพโค้ดนี้เพื่อปรับปรุงประสิทธิภาพในขณะที่ยังคงฟังก์ชันการทํางานเหมือนเดิมได้อย่างไร"
Copilot ในโหมดถามอาจตอบกลับด้วยรายการคําแนะนํา เช่น:
- แทนที่ลูปที่ซ้อนกันด้วยการค้นหาพจนานุกรมที่ลดความซับซ้อนจาก O(n²) เป็น O(n)
- แบทช์คิวรีฐานข้อมูลเพื่อขจัดปัญหา N+1
- ใช้ StringBuilder แทนการต่อสายอักขระเพื่อลดการจัดสรรหน่วยความจํา
- พิจารณาการแคชข้อมูลที่เข้าถึงบ่อยเพื่อหลีกเลี่ยงการคํานวณซ้ํา
มันอาจร่างโค้ดหลอกสั้น ๆ หรือแสดงให้เห็นว่าโค้ดส่วนหนึ่งจะมีลักษณะอย่างไรหลังจากใช้การเพิ่มประสิทธิภาพเหล่านี้
ทําซ้ําด้วยคําถามติดตามผล
คุณสามารถดูรายละเอียดแนวลึกของคําแนะนําใดก็ได้:
- "แสดงวิธีใช้การเพิ่มประสิทธิภาพการค้นหาพจนานุกรม"
- "กลยุทธ์การแคชใดจะมีประสิทธิภาพมากที่สุดสําหรับรหัสนี้"
- "ความหมายของหน่วยความจําของการเพิ่มประสิทธิภาพที่แนะนําคืออะไร"
ผ่านบทสนทนานี้ GitHub Copilot ช่วยให้คุณสร้างแผนการเพิ่มประสิทธิภาพ เมื่อสิ้นสุดการสํารวจโหมดถาม คุณอาจมีรายการการเปลี่ยนแปลงที่เฉพาะเจาะจงที่จะนําไปใช้ เช่น
- การสืบค้นฐานข้อมูลแบบแบทช์เพื่อลดการเดินทางไปกลับ
- แทนที่การค้นหาเชิงเส้นด้วยการค้นหาตามแฮช
- ใช้การแคชอัจฉริยะสําหรับข้อมูลที่เข้าถึงบ่อย
- ใช้โครงสร้างข้อมูลและอัลกอริทึมที่มีประสิทธิภาพมากขึ้น
วิธีการที่มีโครงสร้างนี้ช่วยให้แน่ใจว่าการเพิ่มประสิทธิภาพใด ๆ จะรักษาฟังก์ชันการทํางานดั้งเดิมไว้ในขณะที่ปรับปรุงประสิทธิภาพอย่างมีนัยสําคัญ
Note
โหมดถามของ GitHub Copilot จะไม่แก้ไขโค้ดของคุณ คุณจึงมีอิสระในการสํารวจแนวทางต่างๆ ในการเพิ่มประสิทธิภาพและประเมินคําแนะนําโดยไม่มีความเสี่ยงใดๆ
จัดการคําแนะนํา GitHub Copilot
ถือว่าการตอบสนองของ GitHub Copilot เป็นแนวทาง ไม่ใช่ความจริงที่แน่นอน ตัวอย่างเช่น GitHub Copilot อาจแนะนําการเพิ่มประสิทธิภาพที่เปลี่ยนแปลงพฤติกรรมหากตีความข้อกําหนดของโค้ดผิด ตรวจสอบคําแนะนําการเพิ่มประสิทธิภาพที่สําคัญกับข้อกําหนดและข้อจํากัดเฉพาะของคุณเสมอ
ตรวจสอบและตีความการวิเคราะห์ของ GitHub Copilot
โปรดทราบว่าการวิเคราะห์ของ GitHub Copilot นั้นขึ้นอยู่กับรูปแบบที่รู้จักและการตรวจสอบโค้ดแบบคงที่ GitHub Copilot ไม่มีข้อมูลรันไทม์ (นั่นคืองานของคุณผ่านการทําโปรไฟล์) ดังนั้นจึงอาจเตือนคุณเกี่ยวกับโค้ดที่ไม่ใช่คอขวดจริงๆ หรืออาจไม่ทราบว่าปัญหามีราคาแพงหากไม่ชัดเจนจากโค้ด ตัวอย่างเช่น การเรียกเมธอดที่ดูไร้พิษภัยซึ่งทํางานหนักจริงๆ
ใช้ GitHub Copilot Ask เพื่อเสริมการวิเคราะห์ของคุณเองและใช้วิจารณญาณของคุณเอง:
หาก GitHub Copilot ตั้งค่าสถานะปัญหาฐานข้อมูลในลูป และโปรไฟล์ของคุณได้รับการยืนยัน
GetPriceFromDatabaseว่าร้อนแรง นั่นเป็นโอกาสในการขายที่มั่นคงอย่างชัดเจนหาก GitHub Copilot ระบุว่า "อัลกอริทึมการเรียงลําดับนี้คือ O(n log n)" เป็นปัญหาที่อาจเกิดขึ้น แต่โปรไฟล์ของคุณแสดงให้เห็นว่าการเรียงลําดับมีค่าใช้จ่ายเล็กน้อยเมื่อเทียบกับการเรียกฐานข้อมูล
หาก GitHub Copilot พลาดปัญหาที่น่าสงสัย ให้ลองถามเกี่ยวกับโค้ดด้วยวิธีอื่น นอกจากนี้ คุณควรตรวจสอบให้แน่ใจว่าได้เพิ่มโค้ดที่จําเป็นลงในบริบทการแชทแล้ว ตัวอย่างเช่น คุณอาจต้องเพิ่มฟังก์ชันตัวช่วยหรือคลาสที่เกี่ยวข้องในการแชท
Note
GitHub Copilot ไม่มีบริบทนอกเหนือจากที่คุณให้ไว้ ตรวจสอบให้แน่ใจว่าโค้ดที่เกี่ยวข้องเปิดอยู่ในเครื่องมือแก้ไขหรือเพิ่มลงในบริบทการแชท หากปัญหาด้านประสิทธิภาพกระจายไปทั่วฐานรหัส คุณสามารถระบุ #codebase ที่จุดเริ่มต้นของข้อความแจ้งเพื่อระบุบริบทสูงสุด
ประโยชน์หลักของการใช้โหมดถามเพื่อระบุปัญหาคอขวด
การใช้โหมดถามของ GitHub Copilot ก็เหมือนกับการมีผู้ตรวจสอบโค้ดที่ช่ําชองพร้อมที่จะแสดงความคิดเห็นเกี่ยวกับด้านประสิทธิภาพ:
- รวดเร็ว – คุณจะได้รับคําตอบในไม่กี่วินาที ซึ่งสามารถตรวจสอบความคิดของคุณเองหรือหยิบยกสิ่งที่คุณพลาดไป
- มีความรู้ – ดึงมาจากคลังข้อมูลขนาดใหญ่ของโค้ดและการอภิปราย โดยพื้นฐานแล้วเป็นการกลั่นกรองภูมิปัญญาทั่วไป
- มันตระหนักถึงบริบท - จะดูโค้ด ของคุณ เมื่อให้คําแนะนํา ทําให้มีความเกี่ยวข้องมากกว่าเอกสารทั่วไป
Summary
การใช้โหมดถามของ GitHub Copilot เป็นวิธีที่มีประสิทธิภาพในการวิเคราะห์และวางแผนการเพิ่มประสิทธิภาพของโค้ดที่มีความสําคัญต่อประสิทธิภาพ ด้วยการมีส่วนร่วมในลักษณะการสนทนา คุณจะได้รับข้อมูลเชิงลึกเกี่ยวกับลักษณะประสิทธิภาพที่มีอยู่ วิธีการนี้ช่วยให้แน่ใจว่าการปรับปรุงประสิทธิภาพใดๆ จะรักษาฟังก์ชันการทํางานดั้งเดิมไว้ พร้อมทั้งเพิ่มประสิทธิภาพของโค้ดและความสามารถในการปรับขนาดได้อย่างมาก