Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden prestatie-inzichten beschreven voor booleaanse toewijzingen in vakken.
Oorzaak
Booleaanse waarden in boksen in .NET maakt heap-toewijzingen telkens wanneer een bool wordt geconverteerd naar een object of interfacetype. Deze toewijzingen, hoewel klein, kunnen zich snel verzamelen in prestatiekritieke codepaden en onnodige garbagecollectiondruk veroorzaken, vooral wanneer dezelfde booleaanse waarden herhaaldelijk worden geplaatst.
Beschrijving van prestatie-inzicht
Wanneer een Booleaanse waarde in een vak wordt geplaatst, wijst de runtime een nieuw object toe aan de heap om het waardetype te verpakken. Omdat er slechts twee mogelijke Booleaanse waarden (enfalse) zijn,true is het herhaaldelijk boksen van deze waarden verspilling. In plaats van impliciet boksen toe te staan, is het efficiƫnter om de boxed exemplaren in de cache op te slaan en opnieuw te gebruiken. U kunt statische leesvelden maken voor de vakken true en false waarden en het juiste exemplaar in de cache retourneren wanneer boksen nodig is.
Een waarschuwing onderzoeken
Klik op de koppeling Onderzoeken om naar de toewijzingsweergave te gaan met de toegewezen booleaanse objecten. Als u dubbelklikt op de toewijzing, ziet u de codepaden waar de toewijzingen plaatsvinden. Overweeg deze toewijzingen te verminderen door de booleaanse waarden in de cache op te slaan en de exemplaren in de cache te retourneren in plaats van herhaalde boksbewerkingen toe te staan.
Als Copilot is ingeschakeld, ziet u de
Selecteer de knop en Copilot biedt een gedetailleerde analyse van de toewijzingspatronen en stelt codeoplossingen voor om uw geheugengebruik te optimaliseren.
Hier volgt een voorbeeld van een booleaanse toewijzing in vakken en de oplossing:
Schending:
class Example
{
public object GetResult(bool condition)
{
return condition; // Implicit boxing occurs here
}
}
Resolutie:
class Example
{
private static readonly object BoxedTrue = true;
private static readonly object BoxedFalse = false;
public object GetResult(bool condition)
{
return condition ? BoxedTrue : BoxedFalse;
}
}
Aanvullende bronnen
Zie de volgende bronnen voor meer informatie over het voorkomen van bokstoewijzingen en andere best practices voor prestaties:
Boksen en Uitpakken (C#-programmeerhandleiding)
CA1841: Prefer Dictionary.Contains-methoden (codeanalyse)
Door deze richtlijnen te volgen, kunt u ervoor zorgen dat uw toepassing is geoptimaliseerd voor prestaties en onnodige boksoverhead voorkomt.