Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Określa, czy środowisko uruchomieniowe języka wspólnego oblicza kody skrótów dla ciągów na podstawie domeny aplikacji.
<Konfiguracji>
<Środowiska wykonawczego>
<UseRandomizedStringHashAlgorithm>
Składnia
<UseRandomizedStringHashAlgorithm
enabled=0|1 />
Atrybuty i elementy
W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne.
Atrybuty
Atrybut | Opis |
---|---|
enabled |
Atrybut wymagany. Określa, czy kody skrótów ciągów są obliczane na podstawie domeny aplikacji. |
Atrybut włączony
Wartość | Opis |
---|---|
0 |
Środowisko uruchomieniowe języka wspólnego nie oblicza kodów skrótów dla ciągów na domenę aplikacji; Pojedynczy algorytm służy do obliczania kodów skrótów ciągów. Jest to opcja domyślna. |
1 |
Środowisko uruchomieniowe języka wspólnego oblicza kody skrótów ciągów dla poszczególnych domen aplikacji. Identyczne ciągi w różnych domenach aplikacji i w różnych procesach będą miały różne kody skrótów. |
Elementy podrzędne
Brak.
Elementy nadrzędne
Element | Opis |
---|---|
configuration |
Element główny w każdym pliku konfiguracji używanym przez środowisko uruchomieniowe języka wspólnego i aplikacje programu .NET Framework. |
runtime |
Zawiera informacje dotyczące opcji inicjowania środowiska uruchomieniowego. |
Uwagi
Domyślnie StringComparer klasa i String.GetHashCode metoda używają pojedynczego algorytmu tworzenia skrótów, który tworzy spójny kod skrótu między domenami aplikacji. Jest to równoważne ustawieniu enabled
atrybutu <UseRandomizedStringHashAlgorithm>
elementu na 0
. Jest to algorytm tworzenia skrótów używany w .NET Framework 4.
Klasa StringComparer i String.GetHashCode metoda mogą również używać innego algorytmu tworzenia skrótów, który oblicza kody skrótów na podstawie domeny aplikacji. W związku z tym kody skrótów dla równoważnych ciągów będą się różnić w różnych domenach aplikacji. Jest to funkcja zgody; aby skorzystać z niego, należy ustawić enabled
atrybut elementu <UseRandomizedStringHashAlgorithm>
na 1
.
Wyszukiwanie ciągów w tabeli skrótów jest zazwyczaj operacją O(1). Jednak w przypadku wystąpienia dużej liczby kolizji wyszukiwanie może stać się operacją O(n2). Za pomocą <UseRandomizedStringHashAlgorithm>
elementu konfiguracji można wygenerować losowy algorytm wyznaczania wartości skrótu dla domeny aplikacji, który z kolei ogranicza liczbę potencjalnych kolizji, szczególnie gdy klucze, z których są obliczane kody skrótów, są oparte na danych wejściowych przez użytkowników.
Przykład
W poniższym przykładzie zdefiniowano klasę zawierającą stałą DisplayString
ciągu prywatnego, s
której wartością jest "To jest ciąg". Zawiera również metodę ShowStringHashCode
, która wyświetla wartość ciągu i jej kod skrótu wraz z nazwą domeny aplikacji, w której jest wykonywane metoda.
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
Po uruchomieniu przykładu bez podawania pliku konfiguracji zostaną wyświetlone dane wyjściowe podobne do poniższych. Należy pamiętać, że kody skrótów dla ciągu są identyczne w dwóch domenach aplikacji.
String 'This is a string.' in domain 'PerDomain.exe': 941BCEAC
String 'This is a string.' in domain 'NewDomain': 941BCEAC
Jeśli jednak dodasz następujący plik konfiguracji do katalogu przykładu, a następnie uruchomisz przykład, kody skrótów dla tego samego ciągu będą się różnić w zależności od domeny aplikacji.
<?xml version ="1.0"?>
<configuration>
<runtime>
<UseRandomizedStringHashAlgorithm enabled="1" />
</runtime>
</configuration>
Gdy plik konfiguracji jest obecny, w przykładzie są wyświetlane następujące dane wyjściowe:
String 'This is a string.' in domain 'PerDomain.exe': 5435776D
String 'This is a string.' in domain 'NewDomain': 75CC8236