Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 dla poszczególnych domen 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.
Attributes
| Attribute | Description |
|---|---|
enabled |
Wymagany atrybut. Określa, czy kody skrótów dla ciągów są obliczane na podstawie domeny aplikacji. |
włączony atrybut
| Wartość | Description |
|---|---|
0 |
Środowisko uruchomieniowe języka wspólnego nie oblicza kodów skrótów dla ciągów na podstawie domeny 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
Żaden.
Elementy nadrzędne
| Składnik | Description |
|---|---|
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 w domenach aplikacji. Jest to odpowiednik ustawienia enabled atrybutu <UseRandomizedStringHashAlgorithm> elementu na 0. Jest to algorytm tworzenia skrótów używany w programie .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 ciągów równoważnych będą się różnić w różnych domenach aplikacji. Jest to funkcja zgody; aby móc z niego korzystać, 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.
Example
W poniższym przykładzie zdefiniowano klasę DisplayString zawierającą stałą ciągu prywatnego, sktórej wartość to "Jest to ciąg". Zawiera również metodę ShowStringHashCode , która wyświetla wartość ciągu i jego 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ć 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