RegexMatchTimeoutException Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wyjątek zgłaszany, gdy czas wykonywania metody dopasowania wzorca wyrażenia regularnego przekracza interwał limitu czasu.
public ref class RegexMatchTimeoutException : TimeoutException
public class RegexMatchTimeoutException : TimeoutException
[System.Serializable]
public class RegexMatchTimeoutException : TimeoutException
type RegexMatchTimeoutException = class
inherit TimeoutException
type RegexMatchTimeoutException = class
inherit TimeoutException
interface ISerializable
[<System.Serializable>]
type RegexMatchTimeoutException = class
inherit TimeoutException
interface ISerializable
Public Class RegexMatchTimeoutException
Inherits TimeoutException
- Dziedziczenie
- Dziedziczenie
- Atrybuty
- Implementuje
Przykłady
Poniższy przykład ilustruje dwa możliwe podejścia do obsługi wyjątku RegexMatchTimeoutException . Stała, której wartość wynosi dwie sekundy, definiuje maksymalny interwał limitu czasu. Metoda Regex.IsMatch(String, String, RegexOptions, TimeSpan) jest początkowo wywoływana z interwałem limitu czasu wynoszącym jedną sekundę. Każdy RegexMatchTimeoutException wyjątek powoduje zwiększenie interwału limitu czasu o jedną sekundę i powoduje wywołanie Regex.IsMatch innej metody, jeśli bieżący interwał limitu czasu jest krótszy niż maksymalny interwał limitu czasu. Jeśli jednak bieżący interwał limitu czasu przekracza maksymalny interwał limitu czasu, program obsługi wyjątków zapisuje informacje w dzienniku zdarzeń i porzuca przetwarzanie wyrażenia regularnego.
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Security;
using System.Text.RegularExpressions;
using System.Threading;
public class Example
{
const int MaxTimeoutInSeconds = 2;
public static void Main()
{
TimeSpan timeout = new TimeSpan(0, 0, 1);
string input = "aaaaaaaaaaaaaaaaaaaaaa>";
if (ValidateInput(input, timeout))
// Perform some operation with valid input string.
Console.WriteLine("'{0}' is a valid string.", input);
}
private static bool ValidateInput(string input, TimeSpan timeout)
{
string pattern = "(a+)+$";
try {
return Regex.IsMatch(input, pattern,
RegexOptions.IgnoreCase, timeout);
}
catch (RegexMatchTimeoutException e) {
// Increase the timeout interval and retry.
timeout = timeout.Add(new TimeSpan(0, 0, 1));
Console.WriteLine("Changing the timeout interval to {0}",
timeout);
if (timeout.TotalSeconds <= MaxTimeoutInSeconds) {
// Pause for a short period.
Thread.Sleep(250);
return ValidateInput(input, timeout);
}
else {
Console.WriteLine("Timeout interval of {0} exceeded.",
timeout);
// Write to event log named RegexTimeouts
try {
if (! EventLog.SourceExists("RegexTimeouts"))
EventLog.CreateEventSource("RegexTimeouts", "RegexTimeouts");
EventLog log = new EventLog("RegexTimeouts");
log.Source = "RegexTimeouts";
string msg = String.Format("Timeout after {0} matching '{1}' with '{2}.",
e.MatchTimeout, e.Input, e.Pattern);
log.WriteEntry(msg, EventLogEntryType.Error);
}
// Do nothing to handle the exceptions.
catch (SecurityException) { }
catch (InvalidOperationException) { }
catch (Win32Exception) { }
return false;
}
}
}
}
// The example writes to the event log and also displays the following output:
// Changing the timeout interval to 00:00:02
// Changing the timeout interval to 00:00:03
// Timeout interval of 00:00:03 exceeded.
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Security
Imports System.Text.RegularExpressions
Imports System.Threading
Module Example
Const MaxTimeoutInSeconds As Integer = 2
Public Sub Main()
Dim timeout As TimeSpan = New TimeSpan(0, 0, 1)
Dim input As String = "aaaaaaaaaaaaaaaaaaaaaa>"
If ValidateInput(input, timeout) Then
' Perform some operation with valid input string.
Console.WriteLine("'{0}' is a valid string.", input)
End If
End Sub
Private Function ValidateInput(input As String,
timeout As TimeSpan) As Boolean
Dim pattern As String = "(a+)+$"
Try
Return Regex.IsMatch(input, pattern,
RegexOptions.IgnoreCase, timeout)
Catch e As RegexMatchTimeoutException
' Increase the timeout interval and retry.
timeout = timeout.Add(New TimeSpan(0, 0, 1))
Console.WriteLine("Changing the timeout interval to {0}",
timeout)
If timeout.TotalSeconds <= MaxTimeoutInSeconds Then
' Pause for a short interval.
Thread.Sleep(250)
Return ValidateInput(input, timeout)
Else
Console.WriteLine("Timeout interval of {0} exceeded.",
timeout)
' Write to event log named RegexTimeouts
Try
If Not EventLog.SourceExists("RegexTimeouts") Then
EventLog.CreateEventSource("RegexTimeouts", "RegexTimeouts")
End If
Dim log As New EventLog("RegexTimeouts")
log.Source = "RegexTimeouts"
Dim msg As String = String.Format("Timeout after {0} matching '{1}' with '{2}.",
e.MatchTimeout, e.Input, e.Pattern)
log.WriteEntry(msg, EventLogEntryType.Error)
' Do nothing to handle the exceptions.
Catch ex As SecurityException
Catch ex As InvalidOperationException
Catch ex As Win32Exception
End Try
Return False
End If
End Try
End Function
End Module
' The example writes to the event log and also displays the following output:
' Changing the timeout interval to 00:00:02
' Changing the timeout interval to 00:00:03
' Timeout interval of 00:00:03 exceeded.
Uwagi
Obecność wyjątku RegexMatchTimeoutException zazwyczaj wskazuje na jeden z następujących warunków:
Aparat wyrażeń regularnych jest nadmiernie wycofywania, ponieważ próbuje dopasować tekst wejściowy do wzorca wyrażenia regularnego.
Interwał limitu czasu został ustawiony zbyt nisko, szczególnie biorąc pod uwagę duże obciążenie maszyny.
Sposób, w jaki program obsługi wyjątków obsługuje wyjątek, zależy od przyczyny wyjątku:
Jeśli przekroczenie limitu czasu wynika z nadmiernego wycofywania, program obsługi wyjątków powinien porzucić próbę dopasowania danych wejściowych i poinformować użytkownika, że upłynął limit czasu w metodzie dopasowywania wzorca wyrażenia regularnego. Jeśli to możliwe, informacje o wzorcu wyrażenia regularnego, który jest dostępny z Pattern właściwości, oraz dane wejściowe, które spowodowały nadmierne wycofywanie, które są dostępne z Input właściwości, powinny być rejestrowane, aby można było zbadać problem i zmodyfikować wzorzec wyrażenia regularnego. Limity czasu wynikające z nadmiernego wycofywania są zawsze powtarzalne.
Jeśli przekroczenie limitu czasu wynika z ustawienia progu limitu czasu jest zbyt niskie, możesz zwiększyć interwał limitu czasu i ponowić próbę wykonania pasującej operacji. Bieżący interwał limitu czasu jest dostępny z MatchTimeout właściwości . RegexMatchTimeoutException Gdy jest zgłaszany wyjątek, aparat wyrażeń regularnych zachowuje swój stan, tak aby wszystkie przyszłe wywołania zwracały ten sam wynik, tak jak gdyby wyjątek nie wystąpił. Zalecanym wzorcem jest oczekiwanie na krótki, losowy interwał czasu po wystąpieniu wyjątku przed ponownym wywołaniem zgodnej metody. Można to powtórzyć kilka razy. Jednak liczba powtórzeń powinna być mała, jeśli przekroczenie limitu czasu jest spowodowane nadmiernym wycofywaniem.
W przykładzie w następnej sekcji przedstawiono obie techniki obsługi .RegexMatchTimeoutException
Konstruktory
| RegexMatchTimeoutException() |
Inicjuje RegexMatchTimeoutException nowe wystąpienie klasy za pomocą komunikatu dostarczonego przez system. |
| RegexMatchTimeoutException(SerializationInfo, StreamingContext) |
Inicjuje nowe wystąpienie klasy RegexMatchTimeoutException z zserializowanymi danymi. |
| RegexMatchTimeoutException(String) |
Inicjuje RegexMatchTimeoutException nowe wystąpienie klasy z określonym ciągiem komunikatu. |
| RegexMatchTimeoutException(String, Exception) |
Inicjuje nowe wystąpienie RegexMatchTimeoutException klasy z określonym komunikatem o błędzie i odwołaniem do wyjątku wewnętrznego, który jest przyczyną tego wyjątku. |
| RegexMatchTimeoutException(String, String, TimeSpan) |
Inicjuje RegexMatchTimeoutException nowe wystąpienie klasy z informacjami o wzorcu wyrażenia regularnego, tekstem wejściowym i interwałem limitu czasu. |
Właściwości
| Data |
Pobiera kolekcję par klucz/wartość, które zapewniają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku. (Odziedziczone po Exception) |
| HelpLink |
Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem. (Odziedziczone po Exception) |
| HResult |
Pobiera lub ustawia HRESULT, zakodowaną wartość liczbową przypisaną do określonego wyjątku. (Odziedziczone po Exception) |
| InnerException |
Exception Pobiera wystąpienie, które spowodowało bieżący wyjątek. (Odziedziczone po Exception) |
| Input |
Pobiera tekst wejściowy, który aparat wyrażeń regularnych przetwarzał po przekroczeniu limitu czasu. |
| MatchTimeout |
Pobiera interwał limitu czasu dla dopasowania wyrażenia regularnego. |
| Message |
Pobiera komunikat opisujący bieżący wyjątek. (Odziedziczone po Exception) |
| Pattern |
Pobiera wzorzec wyrażenia regularnego, który został użyty w operacji dopasowania, gdy wystąpił limit czasu. |
| Source |
Pobiera lub ustawia nazwę aplikacji lub obiektu, który powoduje błąd. (Odziedziczone po Exception) |
| StackTrace |
Pobiera reprezentację ciągu natychmiastowych ramek w stosie wywołań. (Odziedziczone po Exception) |
| TargetSite |
Pobiera metodę, która zgłasza bieżący wyjątek. (Odziedziczone po Exception) |
Metody
| Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
| GetBaseException() |
Po przesłonięciu w klasie pochodnej funkcja zwraca Exception główną przyczynę co najmniej jednego kolejnego wyjątku. (Odziedziczone po Exception) |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Po zastąpieniu w klasie pochodnej ustawia SerializationInfo element z informacjami o wyjątku. (Odziedziczone po Exception) |
| GetType() |
Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia. (Odziedziczone po Exception) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
| ToString() |
Tworzy i zwraca reprezentację ciągu bieżącego wyjątku. (Odziedziczone po Exception) |
Zdarzenia
| SerializeObjectState |
Nieaktualne.
Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku zawierającego serializowane dane o wyjątku. (Odziedziczone po Exception) |
Jawne implementacje interfejsu
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfo Wypełnia obiekt danymi wymaganymi do serializacji RegexMatchTimeoutException obiektu. |