Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Avgör om den vanliga språkkörningen beräknar hashkoder för strängar per programdomän.
<konfiguration>
<Runtime>
<UseRandomizedStringHashAlgorithm>
Syntax
<UseRandomizedStringHashAlgorithm
enabled=0|1 />
Attribut och element
I följande avsnitt beskrivs attribut, underordnade element och överordnade element.
Attributes
| Attribute | Description |
|---|---|
enabled |
Obligatoriskt attribut. Anger om hash-koder för strängar beräknas per programdomän. |
aktiverat attribut
| Värde | Description |
|---|---|
0 |
Den vanliga språkkörningen beräknar inte hashkoder för strängar per programdomän. en enda algoritm används för att beräkna stränghashkoder. Det här är standardinställningen. |
1 |
Common Language Runtime beräknar hashkoder för strängar per programdomän. Identiska strängar i olika programdomäner och i olika processer har olika hash-koder. |
Underordnade element
Ingen.
Överordnade element
| Komponent | Description |
|---|---|
configuration |
Rotelementet i varje konfigurationsfil som används av vanliga språkkörnings- och .NET Framework-program. |
runtime |
Innehåller information om initieringsalternativ för körning. |
Anmärkningar
Som standard StringComparer använder klassen och String.GetHashCode metoden en enda hashalgoritm som genererar en konsekvent hash-kod mellan programdomäner. Detta motsvarar att ange enabled attributet för elementet <UseRandomizedStringHashAlgorithm> till 0. Det här är hash-algoritmen som används i .NET Framework 4.
Klassen StringComparer och String.GetHashCode metoden kan också använda en annan hashalgoritm som beräknar hashkoder per programdomän. Därför skiljer sig hash-koder för motsvarande strängar mellan programdomäner. Det här är en opt-in-funktion. för att dra nytta av det måste du ange enabled -attributet för elementet <UseRandomizedStringHashAlgorithm> till 1.
Strängsökningen i en hash-tabell är vanligtvis en O(1)-åtgärd. Men när ett stort antal kollisioner inträffar kan sökningen bli en O(n2)-åtgärd. Du kan använda konfigurationselementet <UseRandomizedStringHashAlgorithm> för att generera en slumpmässig hashalgoritm per programdomän, vilket i sin tur begränsar antalet potentiella kollisioner, särskilt när nycklarna som hashkoderna beräknas från baseras på dataindata från användarna.
Example
I följande exempel definieras en DisplayString klass som innehåller en privat strängkonstant, , svars värde är "Det här är en sträng". Den innehåller också en ShowStringHashCode metod som visar strängvärdet och dess hash-kod tillsammans med namnet på programdomänen där metoden körs.
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
När du kör exemplet utan att ange en konfigurationsfil visas utdata som liknar följande. Observera att hash-koderna för strängen är identiska i de två programdomänerna.
String 'This is a string.' in domain 'PerDomain.exe': 941BCEAC
String 'This is a string.' in domain 'NewDomain': 941BCEAC
Men om du lägger till följande konfigurationsfil i exemplets katalog och sedan kör exemplet, skiljer sig hash-koderna för samma sträng efter programdomän.
<?xml version ="1.0"?>
<configuration>
<runtime>
<UseRandomizedStringHashAlgorithm enabled="1" />
</runtime>
</configuration>
När konfigurationsfilen finns visar exemplet följande utdata:
String 'This is a string.' in domain 'PerDomain.exe': 5435776D
String 'This is a string.' in domain 'NewDomain': 75CC8236