Share via


Prestatieregels

Prestatieregels ondersteunen krachtige bibliotheken en toepassingen.

In deze sectie

Regel Beschrijving
CA1802: letterlijke waarden gebruiken, indien van toepassing Een veld wordt gedeclareerd als statisch en alleen-lezen (Gedeeld en Alleen-lezen in Visual Basic) en wordt geïnitialiseerd met een waarde die tijdens het compileren kan worden samengesteld. Omdat de waarde die aan het doelveld is toegewezen, kan worden samengesteld tijdens het compileren, wijzigt u de declaratie in een const-veld (Const in Visual Basic), zodat de waarde wordt berekend tijdens het compileren in plaats van tijdens runtime.
CA1805: Initialiseer niet onnodig De .NET-runtime initialiseert alle velden met verwijzingstypen naar de standaardwaarden voordat de constructor wordt uitgevoerd. In de meeste gevallen is het expliciet initialiseren van een veld naar de standaardwaarde redundant, wat extra onderhoudskosten toevoegt en de prestaties kan verminderen (bijvoorbeeld met een grotere assemblygrootte).
CA1806: Methoderesultaten niet negeren Er wordt een nieuw object gemaakt, maar nooit gebruikt, of een methode die een nieuwe tekenreeks maakt en retourneert, en de nieuwe tekenreeks wordt nooit gebruikt, of een COM- of P/Invoke-methode retourneert een HRESULT- of foutcode die nooit wordt gebruikt.
CA1810: Referentietype statische velden inline initialiseren Wanneer een type een expliciete statische constructor declareert, voegt de JIT-compiler (Just-In-Time) een controle toe aan elke statische methode en instantieconstructor van het type om ervoor te zorgen dat de statische constructor eerder is aangeroepen. Statische constructorcontroles kunnen de prestaties verminderen.
CA1812: Vermijd niet-geïnstantieerde interne klassen Een exemplaar van een type assemblyniveau wordt niet gemaakt door code in de assembly.
CA1813: Niet-verzegelde kenmerken voorkomen .NET biedt methoden voor het ophalen van aangepaste kenmerken. Deze methoden doorzoeken standaard de overnamehiërarchie van kenmerken. Het afdichten van het kenmerk elimineert de zoekopdracht via de overnamehiërarchie en kan de prestaties verbeteren.
CA1814: Voorkeur aan gelabelde matrices boven multidimensionaal Een gelabelde matrix is een matrix waarvan de elementen matrices zijn. De matrices waaruit de elementen bestaan, kunnen verschillende grootten hebben, wat kan leiden tot minder verspilde ruimte voor sommige gegevenssets.
CA1815: Onderdrukking is gelijk aan en operator is gelijk aan waardetypen Voor waardetypen gebruikt de overgenomen implementatie van Equals de bibliotheek Weerspiegeling en vergelijkt de inhoud van alle velden. Weerspiegeling is rekenkrachtig en het vergelijken van elk veld voor gelijkheid kan onnodig zijn. Als u verwacht dat gebruikers instanties vergelijken of sorteren, of exemplaren gebruiken als hashtabelsleutels, moet uw waardetype Gelijk zijn implementeren.
CA1819: Eigenschappen mogen geen matrices retourneren Matrices die door eigenschappen worden geretourneerd, zijn niet beveiligd tegen schrijven, zelfs niet als de eigenschap het kenmerk Alleen-lezen heeft. Als u de matrix manipulatiebestendig wilt houden, moet de eigenschap een kopie van de matrix retourneren. Normaal gesproken begrijpen gebruikers de negatieve gevolgen van het aanroepen van een dergelijke eigenschap niet.
CA1820: Testen op lege tekenreeksen met tekenreekslengte Het vergelijken van tekenreeksen met behulp van de eigenschap String.Length of de methode String.IsNullOrEmpty is aanzienlijk sneller dan het gebruik van Equals.
CA1821: Lege finalizers verwijderen Vermijd waar mogelijk finalizers vanwege de extra prestatieoverhead die betrokken is bij het bijhouden van de levensduur van objecten. Bij een lege finalizer is er sprake van extra overhead zonder enig voordeel.
CA1822: Leden markeren als statisch Leden die geen toegang hebben tot exemplaargegevens of methoden voor aanroepen van exemplaren, kunnen worden gemarkeerd als statisch (gedeeld in Visual Basic). Nadat u de methoden als statisch hebt gemarkeerd, verzendt de compiler niet-virtuele aanroepsites naar deze leden. Dit kan u een meetbare prestatiewinst bieden voor prestatiegevoelige code.
CA1823: Ongebruikte privévelden vermijden Er zijn privévelden gedetecteerd die niet in de assembly worden geopend.
CA1824: Assembly's markeren met NeutralResourcesLanguageAttribute Het kenmerk NeutralResourcesLanguage informeert de Resource Manager over de taal die is gebruikt om de resources van een neutrale cultuur voor een assembly weer te geven. Dit verbetert de opzoekprestaties voor de eerste resource die u laadt en kan uw werkset verminderen.
CA1825: Matrixtoewijzingen met lengte nul vermijden Het initialiseren van een matrix met lengte nul leidt tot onnodige geheugentoewijzing. Gebruik in plaats daarvan het statisch toegewezen lege matrixexemplaren door aan te roepen Array.Empty. De geheugentoewijzing wordt gedeeld in alle aanroepen van deze methode.
CA1826: Eigenschap gebruiken in plaats van Linq Enumerable-methode Enumerable LINQ-methode is gebruikt voor een type dat een equivalente, efficiëntere eigenschap ondersteunt.
CA1827: Gebruik count/LongCount niet wanneer any kan worden gebruikt Count of LongCount methode is gebruikt waar Any de methode efficiënter zou zijn.
CA1828: Gebruik CountAsync/LongCountAsync niet wanneer AnyAsync kan worden gebruikt CountAsync of LongCountAsync methode is gebruikt waar AnyAsync de methode efficiënter zou zijn.
CA1829: de eigenschap Length/Count gebruiken in plaats van de methode Enumerable.Count Count LINQ-methode is gebruikt voor een type dat ondersteuning biedt voor een equivalente, efficiëntere Length eigenschap of Count eigenschap.
CA1830: Voorkeur sterk getypte append- en insert-methode overloads on StringBuilder Append en Insert biedt overbelastingen voor meerdere typen dan System.String. Indien mogelijk geeft u de voorkeur aan de sterk getypte overbelasting met behulp van ToString() en de op tekenreeks gebaseerde overbelasting.
CA1831: AsSpan gebruiken in plaats van op bereik gebaseerde indexeerfuncties voor tekenreeksen indien van toepassing Wanneer u een bereikindexeerfunctie op een tekenreeks gebruikt en impliciet de waarde toewijst aan een type ReadOnlySpan-teken<>, wordt de methode Substring gebruikt in plaats van Slice, die een kopie van het aangevraagde gedeelte van de tekenreeks produceert.
CA1832: AsSpan of AsMemory gebruiken in plaats van op range gebaseerde indexeerfuncties voor het ophalen van ReadOnlySpan of ReadOnlyMemory-gedeelte van een matrix Wanneer u een bereikindexeerfunctie op een matrix gebruikt en de waarde impliciet toewijst aan een ReadOnlySpan<T> of ReadOnlyMemory<T> ander type, wordt de methode GetSubArray gebruikt in plaats van Slice, die een kopie van het aangevraagde gedeelte van de matrix produceert.
CA1833: AsSpan of AsMemory gebruiken in plaats van indexeerfuncties op basis van bereik voor het ophalen van span- of geheugengedeelte van een matrix Wanneer u een bereikindexeerfunctie op een matrix gebruikt en de waarde impliciet toewijst aan een Span<T> of Memory<T> ander type, wordt de methode GetSubArray gebruikt in plaats van Slice, die een kopie van het aangevraagde gedeelte van de matrix produceert.
CA1834: StringBuilder.Append(char) gebruiken voor tekenreeksen met één teken StringBuilder heeft een Append overbelasting die een char als argument gebruikt. Liever de overbelasting aanroepen om de char prestaties te verbeteren.
CA1835: Prefereert de op geheugen gebaseerde overbelastingen voor ReadAsync en WriteAsync 'Stream' heeft een 'ReadAsync'-overbelasting die een 'Memory<Byte>' als eerste argument gebruikt, en een 'WriteAsync'-overbelasting die een ReadOnlyMemory<Byte> als eerste argument gebruikt. Geef de voorkeur aan het aanroepen van overbelastingen op basis van geheugen, die efficiënter zijn.
CA1836: Voorkeur IsEmpty over Count wanneer beschikbaar Geef de voorkeur IsEmpty aan eigenschap die efficiënter is danCount, LengthCount<TSource>(IEnumerable<TSource>) of LongCount<TSource>(IEnumerable<TSource>) om te bepalen of het object items bevat of niet.
CA1837: gebruiken Environment.ProcessId in plaats van Process.GetCurrentProcess().Id Environment.ProcessId is eenvoudiger en sneller dan Process.GetCurrentProcess().Id.
CA1838: Parameters voor P/Invokes vermijden StringBuilder Marshalling van StringBuilder altijd een systeemeigen bufferkopie, wat resulteert in meerdere toewijzingen voor één marshallbewerking.
CA1839: Environment.ProcessPath gebruiken in plaats van Process.GetCurrentProcess(). MainModule.FileName Environment.ProcessPath is eenvoudiger en sneller dan Process.GetCurrentProcess().MainModule.FileName.
CA1840: Environment.CurrentManagedThreadId gebruiken in plaats van Thread.CurrentThread.ManagedThreadId Environment.CurrentManagedThreadId is compacter en efficiënter dan Thread.CurrentThread.ManagedThreadId.
CA1841: Voorkeurswoordenlijst bevat methoden Het aanroepen van Contains de Keys of Values verzameling kan vaak duurder zijn dan bellen ContainsKey of ContainsValue in de woordenlijst zelf.
CA1842: Gebruik 'WhenAll' niet met één taak Het gebruik met WhenAll één taak kan leiden tot prestatieverlies. Wacht of retourneer in plaats daarvan de taak.
CA1843: Gebruik 'WaitAll' niet met één taak Het gebruik met WaitAll één taak kan leiden tot prestatieverlies. Wacht of retourneer in plaats daarvan de taak.
CA1844: Op geheugen gebaseerde onderdrukkingen van asynchrone methoden bieden bij het subklassen 'Stream' Als u de prestaties wilt verbeteren, overschrijft u de asynchrone methoden op basis van geheugen wanneer u Stream subklasseert. Implementeer vervolgens de op matrix gebaseerde methoden op basis van de geheugenmethoden.
CA1845: gebruik tekenreeks op basis van span. Concat' Het is efficiënter om te gebruiken AsSpan en string.Concatin plaats van Substring een samenvoegingsoperator.
CA1846: Voorkeur AsSpan boven Substring AsSpan is efficiënter dan Substring. Substring voert een O(n) tekenreekskopie uit, terwijl AsSpan dit niet het geval is en een constante kosten heeft. AsSpan voert ook geen heap-toewijzingen uit.
CA1847: Letterlijke tekens gebruiken voor één tekenzoekactie Gebruik String.Contains(char) in plaats van String.Contains(string) bij het zoeken naar één teken.
CA1848: De LoggerMessage-gemachtigden gebruiken Gebruik de LoggerMessage gemachtigden voor betere prestaties.
CA1849: asynchrone methoden aanroepen in een asynchrone methode In een methode die al asynchroon is, moeten aanroepen naar andere methoden zijn naar hun asynchrone versies, waar ze bestaan.
CA1850: Voorkeur voor statische HashData methode ComputeHash Het is efficiënter om de statische HashData methode te gebruiken voor het maken en beheren van een HashAlgorithm exemplaar dat moet worden aangeroepen ComputeHash.
CA1851: Mogelijke meerdere inventarisaties van IEnumerable verzameling Mogelijke meerdere inventarisaties van IEnumerable verzamelingen. Overweeg een implementatie te gebruiken die meerdere opsommingen vermijdt.
CA1852: Interne afdichtingstypen Een type dat niet toegankelijk is buiten de assembly en geen subtypen in de bijbehorende assembly bevat, is niet verzegeld.
CA1853: Onnodige aanroep naar 'Dictionary.ContainsKey(key)' Er is geen noodzaak om mee Dictionary.ContainsKey(key)te bewakenDictionary.Remove(key). Dictionary<TKey,TValue>.Remove(TKey) controleert al of de sleutel bestaat en wordt niet gegenereerd als deze niet bestaat.
CA1854: Geef de voorkeur aan de methode 'IDictionary.TryGetValue(TKey, out TValue)' Geef de voorkeur aan 'TryGetValue' via een indexeerfunctie voor woordenlijsttoegang die wordt beveiligd door een 'ContainsKey'-controle. 'ContainsKey' en de indexeerfunctie zoeken beide de sleutel op, dus door 'TryGetValue' te gebruiken, voorkomt u de extra zoekactie.
CA1855: Span<T> gebruiken. Clear() in plaats van Span<T>. Fill() Het is efficiënter om aan te roepen Span<T>.Clear() dan het aanroepen Span<T>.Fill(T) om de elementen van het bereik te vullen met een standaardwaarde.
CA1856: Onjuist gebruik van kenmerk ConstantExpected Het ConstantExpectedAttribute kenmerk wordt niet correct toegepast op een parameter.
CA1857: De parameter verwacht een constante voor optimale prestaties Er wordt een ongeldig argument doorgegeven aan een parameter met ConstantExpectedAttributeaantekeningen.
CA1858: StartsWith gebruiken in plaats van IndexOf Het is efficiënter om aan te roepen String.StartsWith dan aan te roepen String.IndexOf om te controleren of een tekenreeks begint met een bepaald voorvoegsel.
CA1859: Gebruik indien mogelijk betontypen voor verbeterde prestaties Code maakt gebruik van interfacetypen of abstracte typen, wat leidt tot onnodige interfaceaanroepen of virtuele aanroepen.
CA1860: Vermijd het gebruik van de extensiemethode Enumerable.Any() Het is efficiënter en duidelijker om te gebruiken Length, Countof IsEmpty (indien mogelijk) om te Enumerable.Any bepalen of een verzamelingstype elementen bevat.
CA1861: Vermijd constante matrices als argumenten Constante matrices die worden doorgegeven als argumenten, worden niet opnieuw gebruikt, wat een prestatieoverhead impliceert. Overweeg ze te extraheren naar 'statische leesvelden' om de prestaties te verbeteren.
CA1862: Gebruik de methode 'StringComparison' overbelastingen om hoofdlettergevoelige tekenreeksvergelijkingen uit te voeren Wanneer code aanroept ToLower() of ToUpper() een niet-hoofdlettergevoelige tekenreeksvergelijking uitvoert, wordt een onnodige toewijzing uitgevoerd.
CA1863: 'CompositeFormat' gebruiken Als u de opmaakkosten wilt verminderen, slaat u een exemplaar op en gebruikt u een CompositeFormat exemplaar als argument voor String.Format of StringBuilder.AppendFormat.
CA1864: Geef de voorkeur aan de methode 'IDictionary.TryAdd(TKey, TValue)' Beide Dictionary<TKey,TValue>.ContainsKey(TKey) en Dictionary<TKey,TValue>.Add voeren een zoekactie uit, die overbodig is. Het is efficiënter om aan te roepen Dictionary<TKey,TValue>.TryAdd, wat een bool aangeeft of de waarde is toegevoegd of niet. TryAdd overschrijft de waarde van de sleutel niet als de sleutel al aanwezig is.
CA1865-CA1867: char overload gebruiken De overbelasting van tekens is een betere prestaties van een tekenreeks met één tekenreeks.
CA1868: Onnodige aanroep naar 'Contains' voor sets Zowel ISet<T>.Add(T) als ICollection<T>.Remove(T) het uitvoeren van een zoekactie, waardoor het vooraf overbodig is om vooraf aan te roepen ICollection<T>.Contains(T) . Het is efficiënter om aan te roepen Add(T) of Remove(T) rechtstreeks, die een Booleaanse waarde retourneert die aangeeft of het item is toegevoegd of verwijderd.
CA1869: JsonSerializerOptions-exemplaren cachen en hergebruiken Het gebruik van een lokaal exemplaar van JsonSerializerOptions serialisatie of deserialisatie kan de prestaties van uw toepassing aanzienlijk verminderen als uw code meerdere keren wordt uitgevoerd, omdat System.Text.Json intern serialisatiegerelateerde metagegevens in het opgegeven exemplaar in de cache opneemt.
CA1870: Een exemplaar van SearchValues in de cache gebruiken Het gebruik van een exemplaar in de cache SearchValues<T> is efficiënter dan het rechtstreeks doorgeven van waarden aan 'IndexOfAny' of 'ContainsAny'.
CA1871: Geef geen null-struct door aan 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' accepteert een object, dus het doorgeven van een null-struct kan ertoe leiden dat de waarde in een vak wordt geplaatst.
CA1872: Prefer 'Convert.ToHexString' en 'Convert.ToHexStringLower' over oproepketens op basis van 'BitConverter.ToString' Gebruik Convert.ToHexString of Convert.ToHexStringLower bij het coderen van bytes aan een hexadecimale tekenreeksweergave. Deze methoden zijn efficiënter en toewijzingsvriendelijk dan het gebruik BitConverter.ToString in combinatie met String.Replace streepjes en String.ToLower.