<UseRandomizedStringHashAlgorithm> Elem

Meghatározza, hogy a közös nyelvi futtatókörnyezet alkalmazástartományonként számítja-e ki a sztringek kivonatkódjait.

<configuration>
  <runtime>
    <UseRandomizedStringHashAlgorithm>

Szemantika

<UseRandomizedStringHashAlgorithm
   enabled=0|1 />

Attribútumok és elemek

A következő szakaszok az attribútumokat, a gyermekelemeket és a szülőelemeket ismertetik.

Attributes

Attribute Description
enabled Kötelező attribútum.

Meghatározza, hogy a sztringek kivonatkódjai alkalmazástartományonként legyenek-e kiszámítva.

engedélyezett attribútum

Érték Description
0 A közös nyelvi futtatókörnyezet nem számítja ki a sztringek kivonatkódjait alkalmazástartományonként; a sztringkivonatkódok kiszámításához egyetlen algoritmust használunk. Ez az alapértelmezett érték.
1 A közös nyelvi futtatókörnyezet alkalmazástartományonként számítja ki a sztringek kivonatkódjait. A különböző alkalmazástartományokban és különböző folyamatokban lévő azonos sztringek különböző kivonatkódokkal rendelkeznek.

Gyermekelemek

Nincs.

Szülőelemek

Elem Description
configuration A közös nyelvi futtatókörnyezet és .NET-keretrendszer alkalmazások által használt összes konfigurációs fájl gyökéreleme.
runtime Információkat tartalmaz a futtatókörnyezet inicializálási beállításairól.

Megjegyzések

Az osztály és a StringComparer metódus alapértelmezés szerint String.GetHashCode egyetlen kivonatoló algoritmust használ, amely konzisztens kivonatkódot hoz létre az alkalmazástartományokban. Ez egyenértékű az elem enabledattribútumának beállításával.<UseRandomizedStringHashAlgorithm>0 Ez a .NET-keretrendszer 4-ben használt kivonatoló algoritmus.

Az StringComparer osztály és a String.GetHashCode metódus egy másik kivonatoló algoritmust is használhat, amely alkalmazástartományonként számítja ki a kivonatkódokat. Ennek eredményeként az egyenértékű sztringek kivonatkódjai eltérőek lesznek az alkalmazástartományokban. Ez egy bejelentkezési funkció; a kihasználása érdekében az enabled elem attribútumát <UseRandomizedStringHashAlgorithm> a következőre 1kell állítania: .

A kivonattáblák sztringkeresése általában O(1) művelet. Ha azonban nagy számú ütközés történik, a keresés O(n2) műveletté válhat. A konfigurációs elem használatával <UseRandomizedStringHashAlgorithm> alkalmazástartományonként véletlenszerű kivonatoló algoritmust hozhat létre, ami korlátozza a lehetséges ütközések számát, különösen akkor, ha a kivonatkódok kiszámításához használt kulcsok a felhasználók által bevitt adatokon alapulnak.

Example

Az alábbi példa egy DisplayString privát sztringállandót tartalmazó osztályt határoz meg, samelynek értéke "Ez egy sztring". Tartalmaz egy metódust ShowStringHashCode is, amely megjeleníti a sztring értékét és kivonatkódját, valamint annak az alkalmazástartománynak a nevét, amelyben a metódust végrehajtja.

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 '{s}' in domain '{AppDomain.CurrentDomain.FriendlyName}': {s.GetHashCode():X8}");
   }
}
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

Ha konfigurációs fájl nélkül futtatja a példát, az a következőhöz hasonló kimenetet jelenít meg. Vegye figyelembe, hogy a sztring kivonatkódjai megegyeznek a két alkalmazástartományban.

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

Ha azonban hozzáadja a következő konfigurációs fájlt a példa könyvtárához, majd futtatja a példát, az ugyanahhoz a sztringhez tartozó kivonatkódok alkalmazástartományonként eltérőek lesznek.

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

Ha a konfigurációs fájl jelen van, a példa a következő kimenetet jeleníti meg:

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

Lásd még