Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.
Une comparaison sensible à la culture de deux chaînes dépend de chaque caractère dans les chaînes ayant plusieurs catégories de pondérations de tri, y compris le système d'écriture, l’ordre alphabétique, la casse et les accents diacritiques. Une clé de tri sert de référentiel de ces pondérations pour une chaîne particulière.
La CompareInfo.GetSortKey méthode retourne une instance de la SortKey classe qui reflète le mappage sensible à la culture des caractères dans une chaîne spécifiée. La valeur d’un SortKey objet est ses données clés, qui sont retournées par la KeyData propriété. Ces données clés se composent d’une série d’octets qui encodent les règles de tri spécifiques à la culture et les options de comparaison spécifiées par l’utilisateur. Une comparaison à l’aide de clés de tri se compose d’une comparaison au niveau du bit des données de clé correspondantes dans chaque clé de tri. Par exemple, si vous créez une clé de tri en appelant la méthode GetSortKey(String, CompareOptions) avec une valeur de CompareOptions.IgnoreCase, une opération de comparaison de chaînes qui utilise la clé de tri est insensible à la casse.
Après avoir créé une clé de tri pour une chaîne, vous comparez les clés de tri en appelant la méthode statique SortKey.Compare . Cette méthode effectue une comparaison simple octet par octet, de sorte qu’elle est beaucoup plus rapide que la méthode String.Compare ou CompareInfo.Compare.
Remarque
Vous pouvez télécharger les tables de pondération de tri, un ensemble de fichiers texte qui contiennent des informations sur les pondérations de caractères utilisées dans les opérations de tri et de comparaison pour les systèmes d’exploitation Windows, et la table d’éléments de classement Unicode par défaut, ainsi que la table de pondération de tri pour Linux et macOS.
Considérations relatives aux performances
Lors de l’exécution d’une comparaison de chaînes, les méthodes Compare et CompareInfo.Compare produisent les mêmes résultats, mais elles ciblent différents scénarios.
À un niveau élevé, la CompareInfo.Compare méthode génère la clé de tri pour chaque chaîne, effectue la comparaison, puis ignore la clé de tri et retourne le résultat de la comparaison. Toutefois, la CompareInfo.Compare méthode ne génère pas de clé de tri entière pour effectuer la comparaison. Au lieu de cela, la méthode génère les données clés de chaque élément de texte (c’est-à-dire, caractère de base, paire de substitution ou séquence de caractères combinée) dans chaque chaîne. La méthode compare ensuite les données clés des éléments de texte correspondants. L’opération se termine dès que le résultat final de la comparaison est déterminé. Les informations de clé de tri sont calculées, mais aucun objet `SortKey` n’est créé. Cette stratégie est économique en termes de performances si les deux chaînes sont comparées une fois, mais devient coûteuse si les mêmes chaînes sont comparées plusieurs fois.
La Compare méthode nécessite la génération d’un SortKey objet pour chaque chaîne avant d’effectuer la comparaison. Cette stratégie est coûteuse en termes de performances pour la première comparaison en raison du temps et de la mémoire investis pour générer les SortKey objets. Toutefois, il devient économique si les mêmes clés de tri sont comparées plusieurs fois.
Par exemple, supposons que vous écriviez une application qui recherche une table de base de données pour la ligne dans laquelle la colonne d’index basée sur des chaînes correspond à une chaîne de recherche spécifiée. La table contient des milliers de lignes et la comparaison de la chaîne de recherche à l’index dans chaque ligne prend beaucoup de temps. Par conséquent, lorsque l’application stocke une ligne et sa colonne d’index, elle génère et stocke également la clé de tri de l’index dans une colonne dédiée à l’amélioration des performances de recherche. Lorsque l’application recherche une ligne cible, elle compare la clé de tri de la chaîne de recherche à la clé de tri de la chaîne d’index, au lieu de comparer la chaîne de recherche à la chaîne d’index.
Considérations relatives à la sécurité
La méthode CompareInfo.GetSortKey(String, CompareOptions) renvoie un objet SortKey avec la valeur basée sur une chaîne spécifiée et une valeur CompareOptions, ainsi que la culture associée à l'objet sous-jacent CompareInfo. Si une décision de sécurité dépend d’une comparaison de chaînes ou d’une modification de cas, vous devez utiliser la CompareInfo.GetSortKey(String, CompareOptions) méthode de la culture invariante pour vous assurer que le comportement de l’opération est cohérent, quels que soient les paramètres de culture du système d’exploitation.
Pour obtenir une clé de tri, procédez comme suit :
Récupérez la culture invariante de la propriété CultureInfo.InvariantCulture.
Récupérez un objet CompareInfo pour la culture invariante depuis la propriété CultureInfo.CompareInfo.
Appelez la méthode CompareInfo.GetSortKey(String, CompareOptions) .
L’utilisation de la valeur d’un SortKey objet équivaut à appeler la méthode Windows LCMapString avec la valeur LCMAP_SORTKEY spécifiée. Toutefois, pour l’objet SortKey , les clés de tri pour les caractères anglais précèdent les clés de tri pour les caractères coréens.
SortKey les objets peuvent être sérialisés, mais uniquement pour qu'ils puissent passer entre AppDomain objets. Si une application sérialise un SortKey objet, l’application doit régénérer toutes les clés de tri lorsqu’il existe une nouvelle version de .NET.
Pour plus d’informations sur les clés de tri, consultez Unicode Technical Standard #10, « Algorithme de classement Unicode » sur le site web du Consortium Unicode.