RegexMatchTimeoutException Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Výjimka, která se vyvolá, když doba provádění metody porovnávání vzorů regulárních výrazů překračuje časový limit.
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
- Dědičnost
- Dědičnost
- Atributy
- Implementuje
Příklady
Následující příklad ukazuje dva možné přístupy ke zpracování RegexMatchTimeoutException výjimky. Konstanta, jejíž hodnota je dvě sekundy, definuje maximální interval časového limitu. Metoda Regex.IsMatch(String, String, RegexOptions, TimeSpan) se zpočátku volá s časovým limitem jedné sekundy. Každá RegexMatchTimeoutException výjimka způsobí zvýšení intervalu časového limitu o jednu sekundu a výsledkem je další volání Regex.IsMatch metody, pokud je aktuální interval časového limitu menší než maximální interval časového limitu. Pokud však aktuální interval časového limitu překročí maximální časový limit, obslužná rutina výjimky zapíše informace do protokolu událostí a opustí zpracování regulárního výrazu.
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.
Poznámky
RegexMatchTimeoutException Přítomnost výjimky obecně značí jednu z následujících podmínek:
Modul regulárních výrazů provádí nadměrné navracení, protože se pokouší spárovat vstupní text se vzorem regulárního výrazu.
Časový limit byl nastaven příliš nízký, zejména při vysokém zatížení počítače.
Způsob, jakým obslužná rutina výjimky zpracovává výjimku, závisí na příčině výjimky:
Pokud vypršení časového limitu způsobí nadměrné navracení, obslužná rutina výjimky by měla opustit pokus o shodu se vstupem a informovat uživatele, že došlo k vypršení časového limitu v metodě porovnávání vzorů regulárního výrazu. Pokud je to možné, informace o vzoru regulárního výrazu, který je k dispozici z Pattern vlastnosti, a vstup, který způsobil nadměrné navracení, které je k dispozici z Input vlastnosti, by se měly protokolovat, aby bylo možné problém prozkoumat a vzor regulárního výrazu upravit. Časové limity způsobené nadměrným navracením jsou vždy reprodukovatelné.
Pokud je výsledkem vypršení časového limitu nastavení příliš nízké prahové hodnoty časového limitu, můžete prodloužit časový limit a zkusit opakovat odpovídající operaci. Aktuální časový limit je k dispozici ve MatchTimeout vlastnosti. Když dojde k RegexMatchTimeoutException vyvolání výjimky, modul regulárních výrazů zachová svůj stav tak, aby jakékoli budoucí vyvolání vrátilo stejný výsledek, jako kdyby k výjimce nedošlo. Doporučeným vzorem je počkat na krátký náhodný časový interval po vyvolání výjimky před opětovným voláním odpovídající metody. To se může opakovat několikrát. V případě vypršení časového limitu by však měl být počet opakování malý v případě nadměrného navracení.
Příklad v další části znázorňuje obě techniky pro zpracování RegexMatchTimeoutException.
Konstruktory
| Name | Description |
|---|---|
| RegexMatchTimeoutException() |
Inicializuje novou instanci RegexMatchTimeoutException třídy se zprávou zadanou systémem. |
| RegexMatchTimeoutException(SerializationInfo, StreamingContext) |
Zastaralé.
Inicializuje novou instanci RegexMatchTimeoutException třídy serializovanými daty. |
| RegexMatchTimeoutException(String, Exception) |
Inicializuje novou instanci RegexMatchTimeoutException třídy se zadanou chybovou zprávou a odkazem na vnitřní výjimku, která je příčinou této výjimky. |
| RegexMatchTimeoutException(String, String, TimeSpan) |
Inicializuje novou instanci třídy s informacemi o vzoru regulárního RegexMatchTimeoutException výrazu, vstupním textu a intervalu časového limitu. |
| RegexMatchTimeoutException(String) |
Inicializuje novou instanci RegexMatchTimeoutException třídy se zadaným řetězcem zprávy. |
Vlastnosti
| Name | Description |
|---|---|
| Data |
Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce. (Zděděno od Exception) |
| HelpLink |
Získá nebo nastaví odkaz na soubor nápovědy přidružený k této výjimce. (Zděděno od Exception) |
| HResult |
Získá nebo nastaví HRESULT, kódovanou číselnou hodnotu, která je přiřazena ke konkrétní výjimce. (Zděděno od Exception) |
| InnerException |
Exception Získá instanci, která způsobila aktuální výjimku. (Zděděno od Exception) |
| Input |
Získá vstupní text, který modul regulárních výrazů zpracovával, když došlo k vypršení časového limitu. |
| MatchTimeout |
Získá časový limit pro shodu regulárního výrazu. |
| Message |
Získá zprávu, která popisuje aktuální výjimku. (Zděděno od Exception) |
| Pattern |
Získá vzor regulárního výrazu, který byl použit v odpovídající operaci, když došlo k vypršení časového limitu. |
| Source |
Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu. (Zděděno od Exception) |
| StackTrace |
Získá řetězcové znázornění okamžitých rámců v zásobníku volání. (Zděděno od Exception) |
| TargetSite |
Získá metodu, která vyvolá aktuální výjimku. (Zděděno od Exception) |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetBaseException() |
Při přepsání v odvozené třídě vrátí Exception to, že je původní příčinou jedné nebo více následných výjimek. (Zděděno od Exception) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Zastaralé.
Při přepsání v odvozené třídě nastaví SerializationInfo s informacemi o výjimce. (Zděděno od Exception) |
| GetType() |
Získá typ modulu runtime aktuální instance. (Zděděno od Exception) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ToString() |
Vytvoří a vrátí řetězcovou reprezentaci aktuální výjimky. (Zděděno od Exception) |
Událost
| Name | Description |
|---|---|
| SerializeObjectState |
Zastaralé.
Nastane, když je výjimka serializována vytvořit objekt stavu výjimky, který obsahuje serializovaná data o výjimce. (Zděděno od Exception) |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Naplní SerializationInfo objekt daty potřebnými k serializaci objektu RegexMatchTimeoutException . |