<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>
0
eş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 1
ayarlamanı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, s
değ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