<UseRandomizedStringHashAlgorithm> elemento<UseRandomizedStringHashAlgorithm> Element

Determina se common language runtime calcola il codice hash per le stringhe in una base di un dominio di applicazione.Determines whether the common language runtime calculates hash codes for strings on a per application domain basis.

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

SintassiSyntax

<UseRandomizedStringHashAlgorithm   
   enabled=0|1 />  

Attributi ed elementiAttributes and Elements

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.The following sections describe attributes, child elements, and parent elements.

AttributiAttributes

AttributoAttribute DescrizioneDescription
enabled Attributo obbligatorio.Required attribute.

Specifica se i codici hash per le stringhe vengono calcolati in una base di un dominio di applicazione.Specifies whether hash codes for strings are calculated on a per application domain basis.

Attributo enabledenabled Attribute

ValoreValue DescrizioneDescription
0 Common language runtime non calcolare i codici hash per le stringhe in una per ogni singolo dominio di applicazione; un solo algoritmo viene utilizzato per calcolare i codici hash di stringa.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. Questa è l'impostazione predefinita.This is the default.
1 Common language runtime consente di calcolare i codici hash per le stringhe in una base di un dominio di applicazione.The common language runtime computes hash codes for strings on a per application domain basis. Stringhe identiche in diversi domini applicazione e in diversi processi avranno i codici hash diverso.Identical strings in different application domains and in different processes will have different hash codes.

Elementi figlioChild Elements

Nessuno.None.

Elementi padreParent Elements

ElementoElement DescrizioneDescription
configuration Elemento radice in ciascun file di configurazione usato in Common Language Runtime e nelle applicazioni .NET Framework.The root element in every configuration file used by the common language runtime and .NET Framework applications.
runtime Contiene informazioni sulle opzioni di inizializzazione in fase di esecuzione.Contains information about runtime initialization options.

NoteRemarks

Per impostazione predefinita, il StringComparer classe e String.GetHashCode metodo utilizza un solo algoritmo hash che genera un codice hash coerente tra domini dell'applicazione.By default, the StringComparer class and the String.GetHashCode method use a single hashing algorithm that produces a consistent hash code across application domains. Questo è equivalente all'impostazione di enabled attributo del <UseRandomizedStringHashAlgorithm> elemento 0.This is equivalent to setting the enabled attribute of the <UseRandomizedStringHashAlgorithm> element to 0. Si tratta dell'algoritmo hash utilizzato nel .NET Framework 4.NET Framework 4.This is the hashing algorithm used in the .NET Framework 4.NET Framework 4.

Il StringComparer classe e String.GetHashCode metodo può anche usare un algoritmo di hash diverso che consente di calcolare i codici hash in una base di un dominio di applicazione.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. Di conseguenza, i codici hash per le stringhe equivalente variano tra domini dell'applicazione.As a result, hash codes for equivalent strings will differ across application domains. È una funzionalità che prevede il consenso esplicito; Per sfruttare i vantaggi di esso, è necessario impostare il enabled attributo del <UseRandomizedStringHashAlgorithm> elemento 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 ricerca della stringa in una tabella hash è in genere un'operazione o (1).The string lookup in a hash table is typically an O(1) operation. Tuttavia, quando si verifica un numero elevato di conflitti, la ricerca può diventare un'operazione O (n2) operazione.However, when a large number of collisions occur, the lookup can become an O(n2) operation. È possibile utilizzare il <UseRandomizedStringHashAlgorithm> elemento di configurazione per generare un algoritmo di hash caso per ogni dominio applicazione, che a sua volta limita il numero di potenziali conflitti, in particolare quando le chiavi da cui vengono calcolati i codici hash sono basate su dati di input da parte degli utenti.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.

EsempioExample

L'esempio seguente definisce un DisplayString classe che include una costante di stringa privata, s, il cui valore è "This is a una stringa".The following example defines a DisplayString class that includes a private string constant, s, whose value is "This is a string." Include inoltre un ShowStringHashCode metodo che visualizza il valore di stringa e il codice hash insieme al nome del dominio dell'applicazione in cui l'esecuzione del metodo.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

Quando si esegue l'esempio senza fornire un file di configurazione, viene visualizzato l'output simile al seguente.When you run the example without supplying a configuration file, it displays output similar to the following. Si noti che i codici hash per la stringa siano identici in due domini applicazione.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  

Tuttavia, se si aggiunge il file di configurazione seguente alla directory dell'esempio e quindi eseguire l'esempio, i codici hash per la stessa stringa diverso dal dominio applicazione.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>  

Quando il file di configurazione è presente, nell'esempio viene visualizzato il seguente output: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  

Vedere ancheSee Also

StringComparer.GetHashCode
String.GetHashCode
Object.GetHashCode