<UseRandomizedStringHashAlgorithm> Öğesi

Ortak dil çalışma zamanının uygulama etki alanı temelinde dizeler için karma kodları hesaplayıp hesaplamadığını belirler.

<Yapılandırma>
  <Çalışma zamanı>
    <UseRandomizedStringHashAlgorithm>

Syntax

<UseRandomizedStringHashAlgorithm
   enabled=0|1 />  

Öznitelikler ve Öğeler

Öznitelikler, alt ve üst öğeler aşağıdaki bölümlerde açıklanmaktadır.

Öznitelikler

Öznitelik Açıklama
enabled Gerekli öznitelik.

Dizeler için karma kodların uygulama etki alanı temelinde hesaplanıp hesaplanmadığını belirtir.

etkin Öznitelik

Değer Açıklama
0 Ortak dil çalışma zamanı, uygulama etki alanı temelinde dizeler için karma kodları hesaplamaz; Dize karma kodlarını hesaplamak için tek bir algoritma kullanılır. Bu varsayılan seçenektir.
1 Ortak dil çalışma zamanı, uygulama etki alanı temelinde dizeler için karma kodları hesaplar. Farklı uygulama etki alanlarındaki ve farklı işlemlerdeki özdeş dizelerin farklı karma kodları olacaktır.

Alt Öğeler

Yok.

Üst Öğeler

Öğe Açıklama
configuration Her yapılandırma dosyasında yer alan ve ortak dil çalışma zamanı ve .NET Framework uygulamaları tarafından kullanılan kök öğe.
runtime Çalışma zamanı başlatma seçenekleri hakkında bilgi içerir.

Açıklamalar

Varsayılan olarak, sınıfı ve String.GetHashCode yöntemi, StringComparer uygulama etki alanları arasında tutarlı bir karma kod oluşturan tek bir karma algoritması kullanır. Bu, öğesinin özniteliğini enabled olarak ayarlamakla <UseRandomizedStringHashAlgorithm>0eşdeğerdir. Bu, .NET Framework 4'te kullanılan karma algoritmasıdır.

StringComparer sınıfı ve String.GetHashCode yöntemi, uygulama etki alanı temelinde karma kodları hesaplayan farklı bir karma algoritması da kullanabilir. Sonuç olarak, eşdeğer dizeler için karma kodları uygulama etki alanlarında farklılık gösterir. Bu bir kabul etme özelliğidir; bundan yararlanmak için öğesinin enabled<UseRandomizedStringHashAlgorithm> özniteliğini olarak 1ayarlamanız gerekir.

Karma tablodaki dize araması genellikle bir O(1) işlemidir. Ancak, çok sayıda çakışma oluştuğunda, arama bir O(n2) işlemine dönüşebilir. Yapılandırma öğesini kullanarak <UseRandomizedStringHashAlgorithm> uygulama etki alanı başına rastgele bir karma algoritması oluşturabilirsiniz. Bu algoritma, özellikle karma kodlarının hesaplandığı anahtarlar kullanıcılar tarafından veri girişine dayandığında olası çakışma sayısını sınırlar.

Örnek

Aşağıdaki örnek, sdeğeri "Bu bir DisplayString dizedir" olan özel dize sabiti içeren bir sınıfı tanımlar. Ayrıca dize değerini ve karma kodunu, yöntemin yürütülmekte olduğu uygulama etki alanının adıyla birlikte görüntüleyen bir ShowStringHashCode yöntem içerir.

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

Örneği bir yapılandırma dosyası sağlamadan çalıştırdığınızda, aşağıdakine benzer bir çıktı görüntüler. Dizenin karma kodlarının iki uygulama etki alanında aynı olduğunu unutmayın.

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

Ancak, aşağıdaki yapılandırma dosyasını örneğin dizinine ekler ve sonra örneği çalıştırırsanız, aynı dizenin karma kodları uygulama etki alanına göre farklılık gösterir.

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

Yapılandırma dosyası mevcut olduğunda örnekte aşağıdaki çıkış görüntülenir:

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

Ayrıca bkz.