RegexMatchTimeoutException Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Исключение, которое выдается, если время выполнения метода сопоставления шаблонов регулярных выражений превышает интервал времени ожидания.
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
- Наследование
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере показаны два возможных подхода к обработке RegexMatchTimeoutException исключения. Константа, значение которой составляет две секунды, определяет максимальный интервал времени ожидания. Метод Regex.IsMatch(String, String, RegexOptions, TimeSpan) изначально вызывается с интервалом времени ожидания в одну секунду. Каждое RegexMatchTimeoutException исключение приводит к увеличению интервала времени ожидания на одну секунду и приводит к другому вызову Regex.IsMatch метода, если текущий интервал времени ожидания меньше максимального интервала времени ожидания. Однако если текущий интервал времени ожидания превышает максимальное время ожидания, обработчик исключений записывает сведения в журнал событий и прекращает обработку регулярного выражения.
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.
Комментарии
Наличие RegexMatchTimeoutException исключения обычно указывает на одно из следующих условий:
Механизм регулярных выражений чрезмерно откативается, пытаясь сопоставить входной текст с шаблоном регулярного выражения.
Интервал времени ожидания слишком мал, особенно с учетом высокой нагрузки на компьютер.
Способ обработки исключения обработчиком исключений зависит от причины исключения:
Если время ожидания является результатом чрезмерного отслеживания, обработчик исключений должен отказаться от попытки сопоставления входных данных и сообщить пользователю, что в методе сопоставления шаблонов регулярных выражений произошло время ожидания. Если это возможно, необходимо регистрировать сведения о шаблоне регулярного выражения, доступном из Pattern свойства , и входных данных, вызвавших чрезмерный обратный поиск, которые доступны в Input свойстве , чтобы можно было исследовать проблему и изменить шаблон регулярного выражения. Время ожидания из-за чрезмерного возврата всегда воспроизводимо.
Если время ожидания является результатом слишком низкого порогового значения времени ожидания, можно увеличить интервал времени ожидания и повторить операцию сопоставления. Текущий интервал времени ожидания доступен в свойстве MatchTimeout . При возникновении RegexMatchTimeoutException исключения обработчик регулярных выражений сохраняет свое состояние, чтобы все последующие вызовы возвращали тот же результат, как если бы исключение не произошло. Рекомендуется дождаться краткого случайного интервала времени после создания исключения, прежде чем снова вызывать соответствующий метод. Это можно повторить несколько раз. Однако количество повторений должно быть небольшим на случай, если время ожидания вызвано чрезмерным возвратом.
В примере в следующем разделе показаны оба метода обработки RegexMatchTimeoutException.
Конструкторы
RegexMatchTimeoutException() |
Инициализирует новый экземпляр класса RegexMatchTimeoutException, используя системное сообщение. |
RegexMatchTimeoutException(SerializationInfo, StreamingContext) |
Инициализирует новый экземпляр класса RegexMatchTimeoutException с сериализованными данными. |
RegexMatchTimeoutException(String) |
Инициализирует новый экземпляр класса RegexMatchTimeoutException с указанной строкой сообщения. |
RegexMatchTimeoutException(String, Exception) |
Инициализирует новый экземпляр класса RegexMatchTimeoutException указанным сообщением об ошибке и ссылкой на внутреннее исключение, вызвавшее данное исключение. |
RegexMatchTimeoutException(String, String, TimeSpan) |
Инициализирует новый экземпляр класса RegexMatchTimeoutException сведениями о шаблоне регулярного выражения, входном тексте и интервалом времени ожидания. |
Свойства
Data |
Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении. (Унаследовано от Exception) |
HelpLink |
Получает или задает ссылку на файл справки, связанный с этим исключением. (Унаследовано от Exception) |
HResult |
Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению. (Унаследовано от Exception) |
InnerException |
Возвращает экземпляр класса Exception, который вызвал текущее исключение. (Унаследовано от Exception) |
Input |
Получает входной текст, который обрабатывался обработчиком регулярных выражений, когда истекло время ожидания. |
MatchTimeout |
Получает интервал времени для сравнения регулярного выражения. |
Message |
Возвращает сообщение, описывающее текущее исключение. (Унаследовано от Exception) |
Pattern |
Получает шаблон регулярного выражения, который использовался в операции сравнения, когда истекло время ожидания. |
Source |
Возвращает или задает имя приложения или объекта, вызывавшего ошибку. (Унаследовано от Exception) |
StackTrace |
Получает строковое представление непосредственных кадров в стеке вызова. (Унаследовано от Exception) |
TargetSite |
Возвращает метод, создавший текущее исключение. (Унаследовано от Exception) |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetBaseException() |
При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений. (Унаследовано от Exception) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetObjectData(SerializationInfo, StreamingContext) |
При переопределении в производном классе задает объект SerializationInfo со сведениями об исключении. (Унаследовано от Exception) |
GetType() |
Возвращает тип среды выполнения текущего экземпляра. (Унаследовано от Exception) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Создает и возвращает строковое представление текущего исключения. (Унаследовано от Exception) |
События
SerializeObjectState |
Устаревшие..
Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении. (Унаследовано от Exception) |
Явные реализации интерфейса
ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Заполняет объект SerializationInfo данными, необходимыми для сериализации объекта RegexMatchTimeoutException. |