Omstrukturer kode med lav ydeevne ved hjælp af GitHub Copilots agenttilstand

Fuldført

Udviklere kan bruge GitHub Copilots agenttilstand til sikkert at refaktorere kode med lav ydeevne og samtidig sikre, at funktionaliteten bevares, og kodekvaliteten forbedres.

Notat

Brug GitHub Copilots Ask-tilstand til at analysere flaskehalse i ydeevnen og formulere en optimeringsplan, før du bruger Helpdesk-medarbejdertilstand til at implementere ændringer. Denne tilgang sikrer, at refactoring udføres omhyggeligt og sikkert.

Hvad er agenttilstand?

GitHub Copilots agenttilstand fungerer autonomt for at udføre komplekse refactoring-opgaver på tværs af din kodebase. I modsætning til Spørg-tilstand, som giver vejledning og forslag i chatpanelet, implementerer Agent-tilstand foreslåede opdateringer som redigeringer direkte i dine kodefiler.

Agenttilstand kan redigere filer, anvende ændringer, køre test og udføre kommandoer baseret på dine instruktioner. Den forstår projektkonteksten og kan opretholde konsistens på tværs af flere filer, hvilket sikrer, at refaktoreringsændringer ikke ødelægger eksisterende funktionalitet.

Helpdesk-medarbejdertilstand er ideel til implementering af optimeringsstrategier i flere trin, der kræver omhyggelig håndtering af afhængigheder, edge-sager og test. Helpdesk-medarbejdertilstand definerer automatisk den påkrævede kontekst og udfører de nødvendige trin for at nå dine mål for forbedring af ydeevnen.

Omstrukturer kode med lav ydeevne ved hjælp af agenttilstand

Du kan bruge agenttilstand til at implementere de optimeringsstrategier, der er identificeret under din analyse af Spørg-tilstand. Agenttilstand kan udføre flere refactoring-trin automatisk, samtidig med at den oprindelige funktionalitet bevares og kodens ydeevne forbedres.

Strategier til refaktorering af kode med lav ydeevne

Her er de vigtigste strategier til brug af Helpdesk-medarbejdertilstand til at refaktorere kode med lav ydeevne:

  • Optimer datastrukturer: Instruer agenttilstand om at erstatte ineffektive datastrukturer som lineære søgninger med optimerede alternativer som ordbøger eller hash-sæt.

  • Implementer cachelagringsmekanismer: Få Agent-tilstand til at tilføje intelligent cachelagring for at undgå overflødige beregninger eller dyre handlinger.

  • Fjern N+1-forespørgselsmønstre: Brug Helpdesk-medarbejdertilstand til at konsolidere flere forespørgsler eller handlinger i batchhandlinger for at opnå bedre ydeevne.

  • Tilføj asynkron behandling: Lad Helpdesk-medarbejdertilstand konvertere blokeringshandlinger til asynkrone mønstre, der forbedrer skalerbarheden og reaktionsevnen.

  • Reducer algoritmisk kompleksitet: Få agenttilstandsalgoritmer til at refaktorere for at bruge mere effektive tilgange med bedre tidskompleksitet.

  • Sørg for sikkerheden: Instruer agenttilstand om at validere, at optimeringer af ydeevnen ikke introducerer sikkerhedssårbarheder eller omgår eksisterende sikkerhedskontroller.

  • Vedligehold funktionalitet: Brug agenttilstand til at bevare al eksisterende forretningslogik og fejlhåndtering, samtidig med at ydeevneegenskaberne forbedres.

Agenttilstand beder om refaktorering af kode med lav ydeevne

Når du bruger Helpdesk-medarbejdertilstand til at refaktorere kode med lav ydeevne, skal dine prompter være specifikke, handlingsrettede og indeholde sikkerhedsovervejelser. Her er nogle eksempler på tekst på naturligt sprog, som du kan medtage i din prompt, når du refaktorerer kode med lav ydeevne:

Forberedelse og sikkerhed

  • "Før refaktorering skal du oprette enhedstests, der verificerer den aktuelle adfærd for de valgte præstationskritiske metoder."
  • "Analyser den valgte kode for sikkerhedsmæssige konsekvenser, og sørg for, at refactoring opretholder alle sikkerhedskontroller."
  • "Opret en backup-gren, og kør eksisterende tests, før du foretager nogen ydeevneoptimeringer af den valgte kode."

Grundlæggende optimeringsoperationer

  • "Omstrukturer den valgte metode til at bruge et ordbogsopslag i stedet for lineær søgning for at forbedre ydeevnen."
  • "Optimer den valgte kode ved at implementere caching-mekanismer til dyre operationer."
  • "Erstat det valgte N+1-forespørgselsmønster med batchhandlinger for at reducere databasekald."
  • "Konverter de valgte blokeringsoperationer til asynkrone mønstre for bedre skalerbarhed."

Avancerede optimeringsmønstre

  • "Omstrukturer den valgte kode ved hjælp af parallel behandling for at forbedre gennemstrømningen, samtidig med at gevindsikkerheden opretholdes."
  • "Optimer den valgte algoritme for at reducere tidskompleksiteten fra O(n²) til O(n log n) eller bedre."
  • "Erstat den valgte ineffektive datastruktur med optimerede samlinger for hurtigere opslag."
  • "Omstrukturer den valgte kode til at bruge dovne indlæsningsmønstre for at forbedre initialiseringsydelsen."

Kvalitet og validering

  • "Efter refactoring skal du køre alle tests og kontrollere, at ydeevnen er forbedret, samtidig med at den identiske funktionalitet opretholdes."
  • "Sørg for, at den refaktorerede kode følger Microsofts C#-kodningskonventioner og bedste praksis for ydeevne."
  • "Bekræft, at den refaktorerede kode bevarer de samme sikkerhedsegenskaber som den oprindelige implementering."
  • "Opret præstationsbenchmarks for at måle den forbedring, der opnås gennem refactoring."

Arbejdsproces i agenttilstand til refaktorering af kode med lav ydeevne

Følgende arbejdsproces viser, hvordan du bruger Helpdesk-medarbejdertilstand til sikkert at refaktorere kode med lav ydeevne:

  1. Forbered dit arbejdsområde

    Sørg for, at du arbejder i en ren Git-gren, og at alt eksisterende arbejde er begået. At arbejde i en ren gren giver dig mulighed for nemt at fortryde ændringer, hvis det er nødvendigt. Naviger til den fil, der indeholder de flaskehalse i ydeevnen, som du analyserede i Spørg-tilstand.

  2. Opsætning af sikkerhedsforanstaltninger

    Før du foretager ændringer, skal du bede Helpdesk-medarbejdertilstand om at oprette eller køre eksisterende enhedstest:

    "Opret omfattende enhedstests for ProcessOrders metoden til at verificere den aktuelle adfærd, før du refaktorerer for ydeevne."

    Dette trin sikrer, at du har et sikkerhedsnet til at kontrollere, at din refactoring bevarer funktionaliteten.

  3. Start med enkle optimeringstrin

    Begynd med ændringer med lav risiko, f.eks. udskiftning af lineære søgninger:

    "Omstrukturer GetProductById metoden ved at erstatte den lineære søgning med et ordbogsopslag for O(1)-ydeevne i stedet for O(n)."

    Agenttilstand analyserer koden og implementerer den ordbogsbaserede tilgang, hvilket forbedrer opslagsydeevnen betydeligt.

  4. Implementere cachingstrategier

    Fortsæt med caching-optimeringer:

    "Tilføj intelligent caching til GetExchangeRate metoden for at undgå overflødige API-kald for den samme valuta inden for en kort tidsperiode."

    Agenttilstand skaber passende cachelagringslogik, hvilket reducerer dyre eksterne servicekald.

  5. Optimer algoritmisk kompleksitet

    Løs mere komplekse problemer med ydeevnen:

    "Omstrukturer den indlejrede sløjfe til CalculateDiscounts at bruge en mere effektiv algoritme, der behandler bulkoperationer i en enkelt gennemgang."

    Helpdesk-medarbejdertilstand identificerer de ineffektive indlejrede løkker og erstatter dem med optimerede algoritmer.

  6. Validere ændringer

    Efter hvert større refaktoriseringstrin skal du validere ændringerne:

    "Kør alle enhedstests og benchmarks for ydeevne for at verificere, at den refaktorerede kode giver identiske resultater med forbedret ydeevne."

    Agenttilstand kan udføre test og rapportere eventuelle fejl, der skal løses.

  7. Gennemgå og gentag

    Hvis der findes problemer, skal du angive specifikke instruktioner til rettelser:

    "Præstationstesten viser kun marginale forbedringer. Gennemgå den refaktorerede caching-logik, og sørg for, at cachehits udnyttes effektivt."

    Helpdesk-medarbejdertilstand analyserer ydeevnemålingerne og foretager de nødvendige rettelser for at opnå de forventede forbedringer.

Denne strukturerede tilgang sikrer, at præstationsoptimering udføres sikkert og systematisk med validering på hvert trin.

Almindelige scenarier for refaktorering af kode med lav ydeevne

Gennemgang af almindelige scenarier kan hjælpe dig med at forstå, hvordan du effektivt bruger Helpdesk-medarbejdertilstand til refaktorering af ydeevne.

Optimer dataadgangsmønstre (eliminer N+1-forespørgsler)

Dataadgangsmønstre, der resulterer i N+1-forespørgsler, kan forringe ydeevnen alvorligt. Refaktorering til batchdatahentning kan forbedre effektiviteten betydeligt.

Dette scenarie kan illustreres ved hjælp af følgende kodestykke:

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

Profilanalyse viser, at GetProductPrice (som forespørger en database) er en flaskehals ved behandling af store ordrer.

Du kan bruge Helpdesk-medarbejdertilstand til at omstrukturere koden ved at batche produktprisopslag. For eksempel:

Prompt i agenttilstand: "Optimer denne kode for at eliminere N+1-forespørgselsmønster ved batching af produktprisopslag."

Agenten omstrukturerer koden på følgende måde:

  1. Indsaml alle unikke produkt-id'er.
  2. Hent priserne i et enkelt databaseopkald.
  3. Kortlæg priser tilbage til ordrer.

Den refaktorerede kode skal ligne følgende kodestykke:

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;
    }
}

Bemærk følgende forbedringer:

  • Den opdaterede kode batcher alle påkrævede prisopslag i et enkelt databasekald.
  • Fejlhåndtering for manglende produkter vedligeholdes korrekt.
  • Koden opretholder den samme forretningslogik, samtidig med at ydeevnen forbedres dramatisk.

Udskift ineffektive algoritmer

Udskiftning af lineær søgning med optimerede datastrukturer for bedre ydeevne.

Dette scenarie kan illustreres ved hjælp af følgende kodestykke:

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;
}

Du kan bruge Helpdesk-medarbejdertilstand til at omstrukturere koden ved hjælp af en ordbog til O(1)-opslag. For eksempel:

Prompten i Helpdesk-medarbejdertilstand: "Optimer produktopslag ved hjælp af en ordbogsbaseret tilgang til O(1)-ydeevne."

Agenten omstrukturerer koden på følgende måde:

  1. Initialiser en ordbog, der knytter produktnavne til produktobjekter.
  2. Brug ordbogen til opslag.

Den refaktorerede kode skal ligne følgende kodestykke:

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;
}

Bemærk følgende forbedringer:

  • Kompleksiteten af opslagstiden forbedres fra O(n) til O(1).
  • Logikken for strengsammenligning bevares ved hjælp af den relevante sammenligning.
  • Initialiseringsomkostningerne afskrives over flere opslagshandlinger.

Implementere asynkron behandling

Konvertering af blokeringshandlinger til asynkrone mønstre for bedre skalerbarhed. Refaktorering af synkron kode til brug for asynkron programmering kan forbedre reaktionsevnen og skalerbarheden.

Dette scenarie kan illustreres ved hjælp af følgende kodestykke:

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

Du kan bruge Helpdesk-medarbejdertilstand til at omstrukturere koden ved at konvertere den til et asynkront mønster. For eksempel:

Prompt i agenttilstand: "Konverter denne synkrone mailbehandling til asynkron for at forbedre skalerbarheden og reaktionsevnen."

Agenten omstrukturerer koden på følgende måde:

  1. Gør metoden asynkron.
  2. Bruges await til asynkrone operationer.

Den refaktorerede kode skal ligne følgende kodestykke:

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);
}

Bemærk følgende forbedringer:

  • Alle opkaldere opdateres til at afvente den asynkrone metode.
  • Det asynkrone mønster anvendes konsekvent i hele opkaldskæden.
  • Fejlhåndtering og annulleringstokens implementeres korrekt, hvor det er nødvendigt.

Sikkerheds- og kvalitetsovervejelser

Når du bruger agenttilstand til refaktorering af ydeevne, skal du altid overveje sikkerheds- og kvalitetskonsekvenser:

Bedste praksis for sikkerhed

Overvej følgende sikkerhedspraksis, når du refaktorerer for ydeevne:

  • Valider inputhåndtering: Sørg for, at optimeringer af ydeevnen ikke omgår inputvalidering eller introducerer sårbarheder i forbindelse med injektion.

  • Bevar godkendelseskontrol: Kontrollér, at sikkerhedsrelaterede valideringer ikke fjernes eller svækkes ved et uheld under optimeringen.

  • Sikker cachelagring: Sørg for, at cachelagrede data ikke afslører følsomme oplysninger eller opretter uautoriserede adgangsstier.

  • Vedligehold revisionsspor: Sørg for, at logførings- og overvågningslogik bevares under forbedringer af ydeevnen.

Kodeks kvalitetsstandarder

Virksomheder vedtager generelt et specifikt sæt kodningsstandarder. Hvis du ikke har retningslinjer, publicerer Microsoft anbefalinger til C#-kodningskonventioner, som du kan følge.

Oprethold høj kodekvalitet ved at følge disse retningslinjer:

  • Følg etablerede mønstre: Sørg for, at refaktoreret kode følger dit teams kodningsstandarder og arkitektoniske mønstre.

  • Bevar læsbarheden: Kontroller, at den optimerede kode forbliver læsbar og vedligeholdelig, selv med forbedringer af ydeevnen.

  • Bevar fejlhåndtering: Sørg for, at al fejlhåndteringslogik vedligeholdes under optimering af ydeevnen.

  • Dokumentér komplekse optimeringer: Tilføj kommentarer, der forklarer ikke-indlysende optimeringer af ydeevnen for fremtidige vedligeholdere.

Sikkerhedsretningslinjer for agenttilstand

Helpdesk-medarbejdertilstand er effektiv, men kræver omhyggelig overvågning:

Før refactoring

  • Arbejd altid i en funktionsgren.
  • Sørg for, at der findes omfattende testdækning.
  • Gennemse optimeringsplanen fra Spørgtilstandsanalyse.
  • Forstå ydeevneegenskaberne og forretningslogikken.

Under refactoring

  • Foretag trinvise ændringer i stedet for store transformationer.
  • Valider hvert optimeringstrin, før du fortsætter til det næste.
  • Gennemgå genereret kode for korrekthed og forbedringer af ydeevnen.
  • Test ofte for at fange regressioner tidligt.

Efter refactoring

  • Kør omfattende benchmarks for ydeevne, herunder sammenligninger af baseline.
  • Udfør kodegennemgang med teammedlemmer.
  • Valider sikkerheds- og funktionalitetsegenskaber.
  • Opdater dokumentationen for at afspejle forbedringer af ydeevnen.

Behandl agenttilstand som en kraftfuld assistent

Selvom agenttilstand kan udføre komplekse optimeringer af ydeevnen, kræver det menneskeligt tilsyn:

  • Gennemgå alle ændringer, før du accepterer dem.
  • Valider, at forbedringer af ydeevnen er målbare og betydningsfulde.
  • Sørg for, at sikkerheds- og funktionalitetskravene er opfyldt.
  • Test grundigt for at fange subtile adfærdsændringer.

Helpdesk-medarbejdertilstand fremskynder optimering af ydeevnen, men erstatter ikke behovet for omhyggelig gennemgang, test og måling.

Resumé

Brug af GitHub Copilots agenttilstand gør det muligt for udviklere effektivt at refaktorere kode med lav ydeevne, samtidig med at kodekvalitet og funktionalitet opretholdes. Ved at kombinere den analytiske indsigt fra Ask-tilstand med Agent-tilstandens udførelsesfunktioner kan du systematisk forbedre applikationens ydeevne, skalerbarhed og effektivitet. Nøglen til succes er at give klare instruktioner, opretholde sikkerhedspraksis og grundigt validere alle ændringer gennem omfattende test og præstationsmåling.