MS Learn empfiehlt, wann immer möglich quellkompilierte Regex zu verwenden. Es empfiehlt sich außerdem, bei der Verarbeitung nicht vertrauenswürdiger Eingaben einen Timeout-Wert zu verwenden. Soweit ich das beurteilen kann, ist es nicht möglich, einen Timeout-Wert für von der Quelle kompilierte Regex anzugeben. Ich habe den regulären Ausdruck
definiert
und möchten eine E-Mail-Adresse wie in diesem Beispiel mit Match m = SCPattern.Match(input) analysieren. Wie lege ich hier einen Timeout-Wert fest?
Hier ist ein MVP:
MS Learn empfiehlt, wann immer möglich quellkompilierte Regex zu verwenden. Es empfiehlt sich außerdem, bei der Verarbeitung nicht vertrauenswürdiger Eingaben einen Timeout-Wert zu verwenden. Soweit ich das beurteilen kann, ist es nicht möglich, einen Timeout-Wert für von der Quelle kompilierte Regex anzugeben. Ich habe den regulären Ausdruck definiert[code][GeneratedRegex(@"^[0-9A-Z]([-.\w]*[0-9A-Z])*$", RegexOptions.IgnoreCase)] private static partial Regex Pattern();
// to prevent instantiation inside the loop private static readonly Regex SCPattern = Pattern(); [/code] und möchten eine E-Mail-Adresse wie in diesem Beispiel mit Match m = SCPattern.Match(input) analysieren. Wie lege ich hier einen Timeout-Wert fest? Hier ist ein MVP: [code]using System.Diagnostics; using System.Text.RegularExpressions;
public partial class Program { [GeneratedRegex(@"^[0-9A-Z]([-.\w]*[0-9A-Z])*$", RegexOptions.IgnoreCase)] private static partial Regex Pattern();
// to prevent instantiation inside the loop private static readonly Regex SCPattern = Pattern();
public static void Main() { Stopwatch sw; string[] addresses = { //"[email protected]", "[email protected]" }; // The following regular expression should not actually be used to // validate an email address. string pattern = @"^[0-9A-Z]([-.\w]*[0-9A-Z])*$"; string pattern2 = @"^[0-9A-Z]([-.\w]*[0-9A-Z])*$"; // use a different pattern name to avoid caching string input;
foreach (var address in addresses) { string mailBox = address[..address.IndexOf('@')]; int index = 0;
// try with regular regex Console.WriteLine("regular regex:"); for (int ctr = mailBox.Length - 1; ctr >= 0; ctr--) { index++;
input = mailBox.Substring(ctr, index);
sw = Stopwatch.StartNew(); Match m = Regex.Match(input, pattern, RegexOptions.IgnoreCase); //, TimeSpan.FromMilliseconds(100) sw.Stop(); if (m.Success) Console.WriteLine("{0,2}. Matched '{1,27}' in {2}", index, m.Value, sw.Elapsed); else Console.WriteLine("{0,2}. Failed '{1,27}' in {2}", index, input, sw.Elapsed); } Console.WriteLine();
// try with precompiled regex index = 0; Console.WriteLine("precompiled regex:"); for (int ctr = mailBox.Length - 1; ctr >= 0; ctr--) { index++;
input = mailBox.Substring(ctr, index);
sw = Stopwatch.StartNew(); Match m = Regex.Match(input, pattern2, RegexOptions.Compiled | RegexOptions.IgnoreCase); // , TimeSpan.FromMilliseconds(100) sw.Stop(); if (m.Success) Console.WriteLine("{0,2}. Matched '{1,27}' in {2}", index, m.Value, sw.Elapsed); else Console.WriteLine("{0,2}. Failed '{1,27}' in {2}", index, input, sw.Elapsed); } Console.WriteLine();
// try with source-compiled regex index = 0; Console.WriteLine("with source-compiled regex:"); for (int ctr = mailBox.Length - 1; ctr >= 0; ctr--) { index++;
input = mailBox.Substring(ctr, index);
sw = Stopwatch.StartNew(); Match m = SCPattern.Match(input); // does not work: , TimeSpan.FromMilliseconds(100) sw.Stop(); if (m.Success) Console.WriteLine("{0,2}. Matched '{1,27}' in {2}", index, m.Value, sw.Elapsed); else Console.WriteLine("{0,2}. Failed '{1,27}' in {2}", index, input, sw.Elapsed); } }
Console.WriteLine("Press any key ..."); Console.ReadKey(); } } [/code]
MS Learn empfiehlt, wann immer möglich quellkompilierte Regex zu verwenden. Es empfiehlt sich außerdem, bei der Verarbeitung nicht vertrauenswürdiger Eingaben einen Timeout-Wert zu verwenden. Soweit...
Ich verwende derzeit die asynchrone Callback-API von gRPC, hauptsächlich für Stream-RPC. Wie kann ich die Anzahl der IO-Threads festlegen? Ich sehe anscheinend keine entsprechenden Konfigurationen.
Ich habe zwei Elemente im Container, deren maximale Breite auf 250 Pixel eingestellt ist. Diese beiden Elemente sind dynamisch und in meinem Beispiel hat das zweite Element eine Breite von 500 Pixel...