Merefaktor kode performa rendah menggunakan modus Agen GitHub Copilot

Selesai

Pengembang dapat menggunakan mode Agen GitHub Copilot untuk merefaktor kode berkinerja rendah dengan aman sambil memastikan fungsionalitas dipertahankan dan kualitas kode ditingkatkan.

Nota

Gunakan mode Tanya GitHub Copilot untuk menganalisis penyempitan performa dan merumuskan rencana pengoptimalan sebelum menggunakan mode Agen untuk menerapkan perubahan. Pendekatan ini memastikan bahwa pemfaktoran ulang dilakukan dengan bijaksana dan aman.

Apa itu mode Agen?

Mode Agen GitHub Copilot bekerja secara otonom untuk menjalankan tugas refaktor yang kompleks di seluruh basis kode Anda. Tidak seperti mode Tanya, yang memberikan panduan dan saran di panel obrolan, mode Agen mengimplementasikan pembaruan yang disarankan sebagai pengeditan langsung di file kode Anda.

Mode agen dapat mengedit file, menerapkan perubahan, menjalankan pengujian, dan menjalankan perintah berdasarkan instruksi Anda. Ini memahami konteks proyek dan dapat mempertahankan konsistensi di beberapa file, memastikan bahwa pemfaktoran ulang perubahan tidak merusak fungsionalitas yang ada.

Mode agen sangat ideal untuk menerapkan strategi pengoptimalan multi-langkah yang memerlukan penanganan dependensi, kasus tepi, dan pengujian yang cermat. Mode agen secara otomatis menentukan konteks yang diperlukan dan menjalankan langkah-langkah yang diperlukan untuk mencapai tujuan peningkatan performa Anda.

Merefaktor kode yang berkinerja rendah menggunakan mode agen

Anda dapat menggunakan mode Agen untuk menerapkan strategi pengoptimalan yang diidentifikasi selama analisis mode Tanya. Mode agen dapat menjalankan beberapa langkah pemfaktoran ulang secara otomatis sambil mempertahankan fungsionalitas asli dan meningkatkan performa kode.

Strategi untuk merefaktor kode berkinerja rendah

Berikut adalah strategi utama untuk menggunakan mode Agen untuk merefaktor kode berkinerja rendah:

  • Mengoptimalkan struktur data: Menginstruksikan mode Agen untuk mengganti struktur data yang tidak efisien seperti pencarian linier dengan alternatif yang dioptimalkan seperti kamus atau set hash.

  • Menerapkan mekanisme cache: Minta mode Agen menambahkan cache cerdas untuk menghindari komputasi redundan atau operasi mahal.

  • Menghilangkan pola kueri N+1: Gunakan mode Agen untuk mengonsolidasikan beberapa kueri atau operasi ke dalam operasi batch untuk performa yang lebih baik.

  • Menambahkan pemrosesan asinkron: Biarkan mode Agen mengonversi operasi pemblokiran ke pola asinkron yang meningkatkan skalabilitas dan responsivitas.

  • Mengurangi kompleksitas algoritma: Memiliki algoritma refaktor mode Agen untuk menggunakan pendekatan yang lebih efisien dengan kompleksitas waktu yang lebih baik.

  • Pastikan keamanan: Instruksikan mode Agen untuk memvalidasi bahwa pengoptimalan performa tidak menimbulkan kerentanan keamanan atau melewati pemeriksaan keamanan yang ada.

  • Pertahankan fungsionalitas: Gunakan mode Agen untuk mempertahankan semua logika bisnis dan penanganan kesalahan yang ada sambil meningkatkan karakteristik performa.

Mode agen memberi petunjuk untuk merefaktor kode berkinerja rendah

Saat menggunakan mode Agen untuk merefaktor kode berkinerja rendah, perintah Anda harus spesifik, dapat ditindaklanjuti, dan menyertakan pertimbangan keamanan. Berikut adalah beberapa contoh teks bahasa alami yang dapat Anda sertakan dalam perintah Anda saat merefaktor kode berkinerja rendah:

Persiapan dan keamanan

  • Sebelum refaktor, buat pengujian unit yang memverifikasi perilaku metode kritis kinerja yang dipilih.
  • "Analisis kode yang dipilih untuk implikasi keamanan dan pastikan pemfaktoran ulang mempertahankan semua pemeriksaan keamanan."
  • "Buat cabang cadangan dan jalankan pengujian yang ada sebelum membuat pengoptimalan performa apa pun ke kode yang dipilih."

Operasi pengoptimalan dasar

  • "Refaktor metode yang dipilih untuk menggunakan pencarian kamus alih-alih pencarian linier untuk meningkatkan performa."
  • Optimalkan kode yang dipilih dengan menerapkan mekanisme caching untuk operasi yang memakan biaya tinggi.
  • "Ganti pola kueri N+1 yang dipilih dengan operasi batch untuk mengurangi panggilan database."
  • "Konversikan operasi pemblokiran yang dipilih menjadi pola asinkron untuk skalabilitas yang lebih baik."

Pola pengoptimalan tingkat lanjut

  • "Refaktor kode yang dipilih dengan menggunakan pemrosesan paralel untuk meningkatkan throughput sambil memastikan keselamatan thread."
  • "Optimalkan algoritma yang dipilih untuk mengurangi kompleksitas waktu dari O(n²) ke O(n log n) atau lebih baik."
  • "Ganti struktur data yang tidak efisien yang dipilih dengan koleksi yang dioptimalkan untuk pencarian yang lebih cepat."
  • Refaktorisasi kode yang dipilih untuk menggunakan pola lazy loading guna meningkatkan kinerja inisialisasi.

Kualitas dan validasi

  • "Setelah refaktor, jalankan semua pengujian dan verifikasi bahwa performa telah meningkat sambil mempertahankan fungsionalitas yang identik."
  • "Pastikan kode yang direfaktor mengikuti konvensi pengkodean C# Microsoft dan praktik terbaik performa."
  • "Validasi bahwa kode yang direfaktor mempertahankan karakteristik keamanan yang sama dengan implementasi asli."
  • Buat tolok ukur kinerja untuk mengukur peningkatan yang dicapai melalui refaktorisasi.

Alur kerja mode agen untuk merefaktor kode berkinerja rendah

Alur kerja berikut menunjukkan cara menggunakan mode Agen untuk merefaktor kode berkinerja rendah dengan aman:

  1. Menyiapkan ruang kerja Anda

    Pastikan Anda bekerja di cabang git yang bersih dan pekerjaan apapun yang ada sudah di-commit. Bekerja di cabang yang bersih memungkinkan Anda untuk dengan mudah mengembalikan perubahan jika diperlukan. Navigasikan ke file yang berisi hambatan performa yang Anda analisis dalam mode Tanyakan.

  2. Menyiapkan langkah-langkah keamanan

    Sebelum membuat perubahan, minta mode Agen untuk membuat atau menjalankan pengujian unit yang ada:

    Buat tes unit komprehensif untuk metode ProcessOrders guna memverifikasi perilaku saat ini sebelum merefaktor untuk kinerja.

    Langkah ini memastikan Anda memiliki jaring pengaman untuk memverifikasi bahwa refaktorisasi Anda mempertahankan fungsi.

  3. Mulailah dengan langkah-langkah pengoptimalan sederhana

    Mulailah dengan perubahan berisiko rendah seperti mengganti pencarian linier:

    Refaktorisasi metode GetProductById dengan mengganti pencarian linier dengan pencarian dalam dictionary untuk performa O(1) alih-alih O(n).

    Mode agen menganalisis kode dan mengimplementasikan pendekatan berbasis kamus, secara signifikan meningkatkan performa pencarian.

  4. Menerapkan strategi cache

    Teruskan dengan pengoptimalan caching.

    Tambahkan cache cerdas ke dalam metode GetExchangeRate untuk menghindari panggilan API yang redundan untuk mata uang yang sama dalam jangka waktu singkat.

    Mode agen membuat logika penembolokan yang sesuai, menurunkan jumlah panggilan layanan eksternal yang mahal.

  5. Mengoptimalkan kompleksitas algoritma

    Atasi masalah performa yang lebih kompleks:

    Refaktor perulangan bersarang dalam CalculateDiscounts untuk menggunakan algoritma yang lebih efisien yang memproses operasi massal dalam satu kali.

    Mode agen mengidentifikasi perulangan berlapis yang tidak efisien dan menggantinya dengan algoritma yang dioptimalkan.

  6. Memvalidasi perubahan

    Setelah setiap langkah pemfaktoran ulang utama, validasi perubahan:

    "Jalankan semua pengujian unit dan tolok ukur performa untuk memverifikasi bahwa kode yang direfaktor menghasilkan hasil yang identik dengan performa yang ditingkatkan."

    Mode agen dapat menjalankan pengujian dan melaporkan kegagalan apa pun yang perlu ditangani.

  7. Tinjau dan ulangi

    Jika masalah ditemukan, berikan instruksi khusus untuk perbaikan:

    "Tes performa hanya menunjukkan peningkatan marginal. Tinjau logika penembolokan yang ditata ulang dan pastikan bahwa hit cache dimanfaatkan secara efektif.

    Mode agen menganalisis metrik performa dan membuat koreksi yang diperlukan untuk mencapai peningkatan yang diharapkan.

Pendekatan terstruktur ini memastikan bahwa pengoptimalan performa dilakukan dengan aman dan sistematis, dengan validasi di setiap langkah.

Skenario umum untuk merefaktor kode berkinerja rendah

Meninjau skenario umum dapat membantu Anda memahami cara menggunakan mode Agen secara efektif untuk refaktor performa.

Mengoptimalkan pola akses data (menghilangkan kueri N+1)

Pola akses data yang mengakibatkan kueri N+1 dapat sangat menurunkan performa. Merefaktorisasi pengambilan data batch dapat secara signifikan meningkatkan efisiensi.

Skenario ini dapat diilustrasikan menggunakan cuplikan kode berikut:

foreach (var order in orders)
{
    decimal price = GetProductPrice(order.ProductId); // database call
    order.TotalPrice = order.Quantity * price;
}

Analisis pembuatan profil menunjukkan bahwa GetProductPrice (yang mengkueri database) adalah hambatan saat memproses pesanan besar.

Anda dapat menggunakan mode Agen untuk merefaktor kode dengan memproses pencarian harga produk secara batch. Contohnya:

Perintah mode agen: "Optimalkan kode ini untuk menghilangkan pola kueri N+1 dengan membuat batch pencarian harga produk."

Agen merefaktor kode sebagai berikut:

  1. Kumpulkan semua ID produk unik.
  2. Ambil harga dalam satu panggilan basis data.
  3. Memetakan harga kembali ke pesanan.

Kode yang direfaktor akan terlihat mirip dengan cuplikan kode berikut:

var productIds = orders.Select(o => o.ProductId).Distinct().ToList();
var priceCache = GetProductPrices(productIds).ToDictionary(p => p.ProductId, p => p.Price);

foreach (var order in orders)
{
    if (priceCache.TryGetValue(order.ProductId, out decimal price))
    {
        order.TotalPrice = order.Quantity * price;
    }
}

Perhatikan peningkatan berikut:

  • Kode yang diperbarui mengumpulkan semua pencarian harga yang diperlukan dalam satu kali panggilan ke database.
  • Penanganan kesalahan untuk produk yang hilang dikelola dengan benar.
  • Kode ini mempertahankan logika bisnis yang sama sambil meningkatkan performa secara dramatis.

Ganti algoritma yang tidak efisien

Mengganti pencarian linier dengan struktur data yang dioptimalkan untuk performa yang lebih baik.

Skenario ini dapat diilustrasikan menggunakan cuplikan kode berikut:

public Product FindProductByName(string name)
{
    foreach (var product in products) // O(n) linear search
    {
        if (product.Name.Equals(name, StringComparison.OrdinalIgnoreCase))
        {
            return product;
        }
    }
    return null;
}

Anda dapat menggunakan mode Agen untuk merefaktor kode dengan menggunakan kamus untuk pencarian O(1). Contohnya:

Perintah mode agen: "Optimalkan pencarian produk dengan menggunakan pendekatan berbasis kamus untuk performa O(1)."

Agen merefaktor kode sebagai berikut:

  1. Membuat pemetaan kamus dari nama produk ke objek produk.
  2. Gunakan kamus untuk pencarian.

Kode yang direfaktor akan terlihat mirip dengan cuplikan kode berikut:

private readonly Dictionary<string, Product> _productsByName = 
    products.ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);

public Product FindProductByName(string name)
{
    _productsByName.TryGetValue(name, out Product product);
    return product;
}

Perhatikan peningkatan berikut:

  • Kompleksitas waktu pencarian meningkat dari O(n) ke O(1).
  • Logika perbandingan string dipertahankan menggunakan komparator yang sesuai.
  • Biaya inisialisasi dibebankan pada beberapa operasi pencarian.

Menerapkan pemrosesan asinkron

Mengonversi operasi pemblokiran ke pola asinkron untuk skalabilitas yang lebih baik. Merefaktor kode sinkron untuk menggunakan pemrograman asinkron dapat meningkatkan responsivitas dan skalabilitas.

Skenario ini dapat diilustrasikan menggunakan cuplikan kode berikut:

public void ProcessOrderNotification(Order order)
{
    var emailContent = GenerateEmailContent(order);
    Thread.Sleep(1000); // simulate email service delay
    SendEmail(order.CustomerEmail, emailContent);
}

Anda dapat menggunakan mode Agen untuk merefaktor kode dengan mengonversinya ke pola asinkron. Contohnya:

Permintaan mode agen: "Konversi pemrosesan email sinkron ini menjadi asinkron untuk meningkatkan skalabilitas dan responsivitas."

Agen merefaktor kode sebagai berikut:

  1. Buat metode asinkron.
  2. Gunakan await untuk operasi asinkron.

Kode yang direfaktor akan terlihat mirip dengan cuplikan kode berikut:

public async Task ProcessOrderNotificationAsync(Order order)
{
    var emailContent = await GenerateEmailContentAsync(order);
    await Task.Delay(1000); // simulate async email service delay
    await SendEmailAsync(order.CustomerEmail, emailContent);
}

Perhatikan peningkatan berikut:

  • Semua penelepon diperbarui untuk menunggu metode asinkron.
  • Pola asinkron diterapkan secara konsisten di seluruh rantai panggilan.
  • Penanganan kesalahan dan token pembatalan diimplementasikan dengan benar jika diperlukan.

Pertimbangan keamanan dan kualitas

Saat menggunakan mode Agen untuk refaktor performa, selalu pertimbangkan implikasi keamanan dan kualitas:

Praktik terbaik keamanan

Pertimbangkan praktik keamanan berikut saat refaktor untuk meningkatkan performa:

  • Memvalidasi penanganan input: Pastikan bahwa pengoptimalan performa tidak melewati validasi input atau memperkenalkan kerentanan injeksi.

  • Mempertahankan pemeriksaan otorisasi: Verifikasi bahwa validasi terkait keamanan tidak dihapus atau dilemahkan secara tidak sengaja selama pengoptimalan.

  • Praktik penyimpanan sementara yang aman: Pastikan bahwa data yang di-cache tidak mengekspos informasi sensitif atau membuat jalur akses yang tidak sah.

  • Mempertahankan jejak audit: Pastikan logika pengelogan dan pemantauan dipertahankan selama peningkatan performa.

Standar kualitas kode

Bisnis umumnya mengadopsi serangkaian standar pengkodian tertentu. Jika Anda tidak memiliki panduan, Microsoft menerbitkan rekomendasi untuk konvensi pengkodian C# yang dapat Anda ikuti.

Pertahankan kualitas kode tinggi dengan mengikuti panduan berikut:

  • Ikuti pola yang ditetapkan: Pastikan kode yang direfaktor mengikuti standar pengkodean dan pola arsitektur tim Anda.

  • Pertahankan keterbacaan: Verifikasi bahwa kode yang dioptimalkan tetap dapat dibaca dan dipertahankan, bahkan dengan peningkatan performa.

  • Mempertahankan penanganan kesalahan: Pastikan bahwa semua logika penanganan kesalahan dipertahankan selama pengoptimalan performa.

  • Dokumentasikan pengoptimalan kompleks: Tambahkan komentar yang menjelaskan pengoptimalan performa yang tidak jelas untuk pemelihara di masa mendatang.

Panduan keamanan mode agen

Mode agen sangat kuat tetapi membutuhkan pengawasan yang cermat:

Sebelum refactoring

  • Selalu lakukan pekerjaan di cabang fitur.
  • Pastikan cakupan pengujian komprehensif ada.
  • Tinjau rencana pengoptimalan dari analisis mode Tanya.
  • Pahami karakteristik performa dan logika bisnis.

Selama pemfaktoran ulang

  • Buat perubahan bertahap alih-alih transformasi besar.
  • Validasi setiap langkah pengoptimalan sebelum melanjutkan ke langkah berikutnya.
  • Tinjau kode yang dihasilkan untuk perbaikan kebenaran dan performa.
  • Uji sering untuk menangkap regresi lebih awal.

Setelah pemfaktoran ulang

  • Jalankan tolok ukur performa komprehensif termasuk perbandingan garis besar.
  • Lakukan tinjauan kode dengan anggota tim.
  • Memvalidasi karakteristik keamanan dan fungsionalitas.
  • Perbarui dokumentasi untuk mencerminkan peningkatan performa.

Perlakukan mode Agen sebagai asisten yang kuat

Meskipun mode Agen dapat melakukan pengoptimalan performa yang kompleks, mode ini memerlukan pengawasan manusia:

  • Tinjau semua perubahan sebelum menerimanya.
  • Pastikan bahwa peningkatan performa terukur dan signifikan.
  • Pastikan persyaratan keamanan dan fungsionalitas terpenuhi.
  • Uji secara menyeluruh untuk menangkap perubahan perilaku yang halus.

Mode agen mempercepat pengoptimalan performa tetapi tidak menggantikan kebutuhan akan tinjauan, pengujian, dan pengukuran yang cermat.

Ringkasan

Menggunakan mode Agen GitHub Copilot memungkinkan pengembang untuk merefaktor kode berkinerja rendah secara efisien sambil mempertahankan kualitas dan fungsionalitas kode. Dengan menggabungkan wawasan analitik dari mode Tanya dengan kemampuan eksekusi mode Agen, Anda dapat secara sistematis meningkatkan performa, skalabilitas, dan efisiensi aplikasi. Kunci keberhasilan adalah memberikan instruksi yang jelas, menjaga praktik keselamatan, dan memvalidasi semua perubahan secara menyeluruh melalui pengujian komprehensif dan pengukuran performa.