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 исключения обычно указывает на одно из следующих условий:
Обработчик регулярных выражений слишком сильно отстраивается, так как пытается сопоставить входной текст с шаблоном регулярного выражения.
Интервал времени ожидания был задан слишком низким, особенно при высокой нагрузке компьютера.
Способ обработки исключения обработчиком исключений зависит от причины исключения:
Если время ожидания приводит к чрезмерному возврату, обработчик исключений должен отказаться от попытки сопоставления входных данных и сообщить пользователю, что время ожидания произошло в методе сопоставления шаблонов регулярных выражений. Если это возможно, сведения о шаблоне регулярных выражений, доступном из свойства, и входных данных, которые вызвали чрезмерную обратную дорожку, доступную из PatternInput свойства, следует регистрировать таким образом, чтобы можно было изучить проблему и изменить шаблон регулярного выражения. Время ожидания из-за чрезмерного обратного отслеживания всегда воспроизводимы.
Если время ожидания приводит к заданию порогового значения времени ожидания слишком низко, можно увеличить интервал времени ожидания и повторить операцию сопоставления. Текущий интервал времени ожидания доступен из MatchTimeout свойства. RegexMatchTimeoutException При возникновении исключения обработчик регулярных выражений сохраняет свое состояние таким образом, чтобы любые будущие вызовы возвращали тот же результат, как если бы исключение не произошло. Рекомендуемый шаблон — ждать кратковременного случайного интервала времени после создания исключения перед вызовом метода сопоставления еще раз. Это может повторяться несколько раз. Однако количество повторений должно быть небольшим, если время ожидания вызвано чрезмерным обратным отслеживанием.
Пример в следующем разделе иллюстрирует оба метода обработки RegexMatchTimeoutException.
Конструкторы
| Имя | Описание |
|---|---|
| RegexMatchTimeoutException() |
Инициализирует новый экземпляр RegexMatchTimeoutException класса с помощью системного сообщения. |
| RegexMatchTimeoutException(SerializationInfo, StreamingContext) |
Устаревшие..
Инициализирует новый экземпляр RegexMatchTimeoutException класса сериализованными данными. |
| RegexMatchTimeoutException(String, Exception) |
Инициализирует новый экземпляр RegexMatchTimeoutException класса с указанным сообщением об ошибке и ссылкой на внутреннее исключение, которое является причиной этого исключения. |
| RegexMatchTimeoutException(String, String, TimeSpan) |
Инициализирует новый экземпляр класса с информацией о шаблоне регулярного RegexMatchTimeoutException выражения, входном тексте и интервале времени ожидания. |
| RegexMatchTimeoutException(String) |
Инициализирует новый экземпляр 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 объекта. |