Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ortak dil çalışma zamanının uygulama etki alanı temelinde dizeler için karma kodları hesaplayıp hesaplamadığını belirler.
<konfigürasyon>
<Çalışma zamanı>
<UseRandomizedStringHashAlgorithm>
Sözdizimi
<UseRandomizedStringHashAlgorithm
enabled=0|1 />
Öznitelikler ve Öğeler
Öznitelikler, alt ve üst öğeler aşağıdaki bölümlerde açıklanmaktadır.
Attributes
| Özellik | Description |
|---|---|
enabled |
Gerekli öznitelik. Dizeler için karma kodların uygulama etki alanı temelinde hesaplanıp hesaplanmayacağını belirtir. |
enabled Özniteliği
| Değer | Description |
|---|---|
0 |
Ortak dil çalışma zamanı, uygulama etki alanı temelinde dizeler için karma kodları hesaplamaz; Dize karması 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ında ve farklı işlemlerde aynı dizelerin farklı karma kodları olacaktır. |
Alt Öğeler
Yok.
Üst Öğeler
| Öğe | Description |
|---|---|
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 kodu üreten 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, karma kodları uygulama etki alanı temelinde hesaplayan farklı bir karma algoritması da kullanabilir. Sonuç olarak, eşdeğer dizeler için karma kodları uygulama etki alanları arası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ın kullanıcılar tarafından veri girişini temel aldığı durumlarda olası çakışma sayısını sınırlar.
Example
Aşağıdaki örnek, sdeğeri "Bu bir DisplayString dizedir" olan özel dize sabitini 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 '{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
Ö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