<UseRandomizedStringHashAlgorithm > élément<UseRandomizedStringHashAlgorithm> Element

Détermine si le common language runtime calcule les codes de hachage pour les chaînes sur un domaine d’application par application.Determines whether the common language runtime calculates hash codes for strings on a per application domain basis.

<configuration><configuration>
<runtime><runtime>
<UseRandomizedStringHashAlgorithm><UseRandomizedStringHashAlgorithm>

SyntaxeSyntax

<UseRandomizedStringHashAlgorithm   
   enabled=0|1 />  

Attributs et élémentsAttributes and Elements

Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.The following sections describe attributes, child elements, and parent elements.

AttributsAttributes

AttributAttribute DescriptionDescription
enabled Attribut requis.Required attribute.

Indique si les codes de hachage pour les chaînes sont calculés sur un domaine d’application par application.Specifies whether hash codes for strings are calculated on a per application domain basis.

Attribut enabledenabled Attribute

ValueValue DescriptionDescription
0 Le common language runtime ne calcule pas les codes de hachage pour les chaînes sur un par domaine d’application ; un algorithme unique est utilisé pour calculer les codes de hachage de chaîne.The common language runtime does not compute hash codes for strings on a per application domain basis; a single algorithm is used to calculate string hash codes. Il s'agit de la valeur par défaut.This is the default.
1 Le common language runtime calcule les codes de hachage pour les chaînes sur un domaine d’application par application.The common language runtime computes hash codes for strings on a per application domain basis. Chaînes identiques dans différents domaines d’application et dans des processus différents auront différents codes de hachage.Identical strings in different application domains and in different processes will have different hash codes.

Éléments enfantsChild Elements

Aucun.None.

Éléments parentsParent Elements

ÉlémentElement DescriptionDescription
configuration Élément racine de chaque fichier de configuration utilisé par le Common Language Runtime et les applications .NET Framework.The root element in every configuration file used by the common language runtime and .NET Framework applications.
runtime Contient des informations sur les options d'initialisation du runtime.Contains information about runtime initialization options.

NotesRemarks

Par défaut, le StringComparer classe et le String.GetHashCode méthode utilise un algorithme de hachage unique qui produit un code de hachage cohérent entre domaines d’application.By default, the StringComparer class and the String.GetHashCode method use a single hashing algorithm that produces a consistent hash code across application domains. Cela revient à affecter la enabled attribut de la <UseRandomizedStringHashAlgorithm> élément à 0.This is equivalent to setting the enabled attribute of the <UseRandomizedStringHashAlgorithm> element to 0. Il s’agit de l’algorithme de hachage utilisé dans le .NET Framework 4.This is the hashing algorithm used in the .NET Framework 4.

Le StringComparer classe et le String.GetHashCode méthode peut également utiliser un algorithme de hachage différent qui calcule les codes de hachage sur une par domaine d’application.The StringComparer class and the String.GetHashCode method can also use a different hashing algorithm that computes hash codes on a per application domain basis. Par conséquent, les codes de hachage des chaînes équivalentes varient entre domaines d’application.As a result, hash codes for equivalent strings will differ across application domains. Il s’agit d’une fonctionnalité d’abonnement ; Pour tirer parti de celui-ci, vous devez définir le enabled attribut de la <UseRandomizedStringHashAlgorithm> élément à 1.This is an opt-in feature; to take advantage of it, you must set the enabled attribute of the <UseRandomizedStringHashAlgorithm> element to 1.

La recherche de chaîne dans une table de hachage est généralement une opération o (1).The string lookup in a hash table is typically an O(1) operation. Toutefois, quand un grand nombre de collisions se produire, la recherche peut devenir un O (n2) opération.However, when a large number of collisions occur, the lookup can become an O(n2) operation. Vous pouvez utiliser le <UseRandomizedStringHashAlgorithm> élément de configuration à générer un algorithme de hachage aléatoire par domaine d’application, qui à son tour limite le nombre de collisions potentielles, en particulier quand les clés à partir de laquelle les codes de hachage sont calculés sont basées sur l’entrée de données par les utilisateurs.You can use the <UseRandomizedStringHashAlgorithm> configuration element to generate a random hashing algorithm per application domain, which in turn limits the number of potential collisions, particularly when the keys from which the hash codes are calculated are based on data input by users.

ExempleExample

L’exemple suivant définit un DisplayString classe qui inclut une constante de chaîne privée, s, dont la valeur est « Il s’agit d’une chaîne. »The following example defines a DisplayString class that includes a private string constant, s, whose value is "This is a string." Il inclut également un ShowStringHashCode méthode qui affiche la valeur de chaîne et son code de hachage, ainsi que le nom du domaine d’application dans lequel la méthode s’exécute.It also includes a ShowStringHashCode method that displays the string value and its hash code along with the name of the application domain in which the method is executing.

using System;

public class Example
{
   public static void Main()
   {
      // Show hash code in current domain.
      DisplayString display = new DisplayString();
      display.ShowStringHashCode();
      
      // Create a new app domain and show string hash code.
      AppDomain domain = AppDomain.CreateDomain("NewDomain");
      var display2 = (DisplayString) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName, 
                                                          "DisplayString");   
      display2.ShowStringHashCode();
   }
}

public class DisplayString : MarshalByRefObject
{
   private String s = "This is a string.";
   
   public override bool Equals(Object obj)
   {
      String s2 = obj as String; 
      if (s2 == null)
         return false;
      else
         return s == s2; 
   }

   public bool Equals(String str)
   {
      return s == str;
   }    
   
   public override int GetHashCode()
   {
      return s.GetHashCode();
   }
   
   public override String ToString() 
   {
      return s;
   }

   public void ShowStringHashCode()
   {
      Console.WriteLine("String '{0}' in domain '{1}': {2:X8}",
                        s, AppDomain.CurrentDomain.FriendlyName, 
                        s.GetHashCode());
   }
}
Module Example
   Public Sub Main()
      ' Show hash code in current domain.
      Dim display As New DisplayString()
      display.ShowStringHashCode()
      
      ' Create a new app domain and show string hash code.
      Dim domain As AppDomain = AppDomain.CreateDomain("NewDomain")
      Dim display2 = CType(domain.CreateInstanceAndUnwrap(GetType(Example).Assembly.FullName, 
                                                          "DisplayString"), DisplayString)   
      display2.ShowStringHashCode()
   End Sub
End Module

Public Class DisplayString : Inherits MarshalByRefObject

   Private s As String = "This is a string."
   
   Public Overrides Function Equals(obj As Object) As Boolean
      Dim s2 As String = TryCast(obj, String)
      If s2 Is Nothing Then
         Return False
      Else
         Return s = s2 
      End If
   End Function

   Public Overloads Function Equals(str As String) As Boolean
      Return s = str
   End Function    
   
   Public Overrides Function GetHashCode() As Integer
      Return s.GetHashCode()
   End Function
   
   Public Overrides Function ToString() As String
      Return s
   End Function

   Public Sub ShowStringHashCode()
      Console.WriteLine("String '{0}' in domain '{1}': {2:X8}",
                        s, AppDomain.CurrentDomain.FriendlyName, 
                        s.GetHashCode())
   End Sub
End Class

Lorsque vous exécutez l’exemple sans fournir un fichier de configuration, il affiche une sortie similaire à ce qui suit.When you run the example without supplying a configuration file, it displays output similar to the following. Notez que les codes de hachage pour la chaîne sont identiques dans les deux domaines d’application.Note that the hash codes for the string are identical in the two application domains.

String 'This is a string.' in domain 'PerDomain.exe': 941BCEAC  
String 'This is a string.' in domain 'NewDomain': 941BCEAC  

Toutefois, si vous ajoutez le fichier de configuration suivant au répertoire de l’exemple et exécutez l’exemple, les codes de hachage pour la même chaîne diffèrent par domaine d’application.However, if you add the following configuration file to the example's directory and then run the example, the hash codes for the same string will differ by application domain.

<?xml version ="1.0"?>  
<configuration>  
   <runtime>  
      <UseRandomizedStringHashAlgorithm enabled="1" />  
   </runtime>  
</configuration>  

Lorsque le fichier de configuration est présent, l’exemple affiche la sortie suivante :When the configuration file is present, the example displays the following output:

String 'This is a string.' in domain 'PerDomain.exe': 5435776D  
String 'This is a string.' in domain 'NewDomain': 75CC8236  

Voir aussiSee also