ระบุปัญหาคอขวดด้านประสิทธิภาพโดยใช้โหมดถามของ 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 หรือไม่ จําเป็นต้องปรับปรุงอะไรบ้าง"
  • "ฉันจะทําให้โค้ดที่เลือกมีประสิทธิภาพมากขึ้นในขณะที่ยังคงความสามารถในการอ่านได้อย่างไร"
  • "อะไรคือผลกระทบด้านความปลอดภัยของการเพิ่มประสิทธิภาพที่แนะนํา"
  • "ฉันจะแน่ใจได้อย่างไรว่าการปรับปรุงประสิทธิภาพจะไม่ทําให้เกิดปัญหาการเธรดหรือการทํางานพร้อมกัน"

เวิร์กโฟลว์การวิเคราะห์ประสิทธิภาพ

เวิร์กโฟลว์ต่อไปนี้สาธิตวิธีการใช้โหมดถามบนโค้ดที่มีความสําคัญต่อประสิทธิภาพการทํางาน:

  1. เปิดรหัสที่มีปัญหา

    นําทางไปยังไฟล์และฟังก์ชันที่มีคอขวดด้านประสิทธิภาพที่คุณต้องการปรับให้เหมาะสม ตัวอย่างเช่น สมมติว่าคุณมีวิธีการ ProcessOrders() ที่การแสดงโปรไฟล์ใช้เวลามากเกินไป

  2. เลือกรหัสที่เกี่ยวข้อง

    การเลือกบล็อกโค้ดเฉพาะ (เช่น วิธีการหรือลูปที่มีความสําคัญต่อประสิทธิภาพ) คุณจะให้ Copilot โฟกัสที่ชัดเจน Copilot ใช้การเลือกนี้เป็นบริบทสําหรับการตอบ

  3. ขอคําอธิบายรหัส

    เริ่มต้นง่ายๆ ตัวอย่างเช่น:

    "Copilot คุณช่วยอธิบายได้ ProcessOrders ไหมว่าวิธีนี้ทําอะไรและระบุข้อกังวลด้านประสิทธิภาพได้ไหม"

    ในโหมดถาม Copilot จะอ่านโค้ดและสร้างคําอธิบายเป็นภาษาอังกฤษธรรมดา ขั้นตอนนี้มีประโยชน์เพื่อให้แน่ใจว่าคุณ (และ GitHub Copilot) เข้าใจตรรกะปัจจุบันอย่างถ่องแท้ก่อนที่จะปรับให้เหมาะสม คําอธิบายอาจกลับมาเช่น:

    "วิธีนี้ประมวลผลรายการคําสั่งซื้อโดยการทําซ้ําในแต่ละคําสั่งซื้อและทําการเรียกฐานข้อมูลแต่ละรายการเพื่อดึงข้อมูลผลิตภัณฑ์ กระบวนการนี้สร้างปัญหาคิวรี N+1 ที่คุณสร้างคิวรีหนึ่งรายการเพื่อรับคําสั่งซื้อ จากนั้นคิวรีเพิ่มเติม N สําหรับแต่ละผลิตภัณฑ์ รูปแบบนี้อาจช้ามากเมื่อประมวลผลคําสั่งซื้อจํานวนมาก..."

    ใช้คําอธิบายเพื่อยืนยันเจตนาของโค้ดและระบุปัญหาคอขวดด้านประสิทธิภาพ

  4. ถามคําถามที่แหลมคมเกี่ยวกับประสิทธิภาพ

    ตอนนี้คุณสามารถวิเคราะห์ได้ ตัวอย่างเช่น:

    • "ความซับซ้อนของเวลาของอัลกอริทึมนี้คืออะไร และปรับขนาดอย่างไร"
    • "ส่วนใดของรหัสนี้น่าจะทําให้เกิดปัญหาคอขวดด้านประสิทธิภาพ"
    • "มีการดําเนินการซ้ําซ้อนหรือรูปแบบที่ไม่มีประสิทธิภาพที่นี่หรือไม่"

    ใช้การตอบกลับของ GitHub Copilot เพื่อระบุโอกาสในการเพิ่มประสิทธิภาพ เช่น:

    "ลูปที่ซ้อนกันสร้างความซับซ้อนของ O(n²) และการเรียกฐานข้อมูลภายในลูปจะสร้างปัญหาการสืบค้น N+1 การต่อสตริงในลูปยังสร้างการจัดสรรหน่วยความจําที่ไม่จําเป็น"

    ใช้คําติชมเพื่อทําการวิเคราะห์ต่อ

  5. ขอคําแนะนําการเพิ่มประสิทธิภาพ

    ตอนนี้คําถามสําคัญ:

    "ฉันจะเพิ่มประสิทธิภาพโค้ดนี้เพื่อปรับปรุงประสิทธิภาพในขณะที่ยังคงฟังก์ชันการทํางานเหมือนเดิมได้อย่างไร"

    Copilot ในโหมดถามอาจตอบกลับด้วยรายการคําแนะนํา เช่น:

    • แทนที่ลูปที่ซ้อนกันด้วยการค้นหาพจนานุกรมที่ลดความซับซ้อนจาก O(n²) เป็น O(n)
    • แบทช์คิวรีฐานข้อมูลเพื่อขจัดปัญหา N+1
    • ใช้ StringBuilder แทนการต่อสายอักขระเพื่อลดการจัดสรรหน่วยความจํา
    • พิจารณาการแคชข้อมูลที่เข้าถึงบ่อยเพื่อหลีกเลี่ยงการคํานวณซ้ํา

    มันอาจร่างโค้ดหลอกสั้น ๆ หรือแสดงให้เห็นว่าโค้ดส่วนหนึ่งจะมีลักษณะอย่างไรหลังจากใช้การเพิ่มประสิทธิภาพเหล่านี้

  6. ทําซ้ําด้วยคําถามติดตามผล

    คุณสามารถดูรายละเอียดแนวลึกของคําแนะนําใดก็ได้:

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

    ผ่านบทสนทนานี้ 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 เป็นวิธีที่มีประสิทธิภาพในการวิเคราะห์และวางแผนการเพิ่มประสิทธิภาพของโค้ดที่มีความสําคัญต่อประสิทธิภาพ ด้วยการมีส่วนร่วมในลักษณะการสนทนา คุณจะได้รับข้อมูลเชิงลึกเกี่ยวกับลักษณะประสิทธิภาพที่มีอยู่ วิธีการนี้ช่วยให้แน่ใจว่าการปรับปรุงประสิทธิภาพใดๆ จะรักษาฟังก์ชันการทํางานดั้งเดิมไว้ พร้อมทั้งเพิ่มประสิทธิภาพของโค้ดและความสามารถในการปรับขนาดได้อย่างมาก