RegexMatchTimeoutException Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Pengecualian yang dilemparkan ketika waktu eksekusi metode pencocokan pola ekspresi reguler melebihi interval waktu habisnya.
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
- Warisan
- Warisan
- Atribut
- Penerapan
Contoh
Contoh berikut mengilustrasikan dua pendekatan yang mungkin untuk menangani RegexMatchTimeoutException pengecualian. Konstanta yang nilainya adalah dua detik menentukan interval batas waktu maksimum. Metode Regex.IsMatch(String, String, RegexOptions, TimeSpan) ini awalnya dipanggil dengan interval waktu habis satu detik. Setiap RegexMatchTimeoutException pengecualian menyebabkan interval waktu habis ditingkatkan satu detik dan menghasilkan panggilan lain ke Regex.IsMatch metode jika interval waktu habis saat ini kurang dari interval waktu habis maksimum. Namun, jika interval waktu habis saat ini melebihi interval waktu habis maksimum, handler pengecualian menulis informasi ke log peristiwa dan meninggalkan pemrosesan ekspresi reguler.
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.
Keterangan
Kehadiran RegexMatchTimeoutException pengecualian umumnya menunjukkan salah satu kondisi berikut:
Mesin ekspresi reguler melakukan backtracking secara berlebihan saat mencoba mencocokkan teks input dengan pola ekspresi reguler.
Interval waktu habis telah diatur terlalu rendah, terutama mengingat beban mesin tinggi.
Cara penangan pengecualian menangani pengecualian tergantung pada penyebab pengecualian:
Jika waktu habis dihasilkan dari backtracking yang berlebihan, handler pengecualian Anda harus meninggalkan upaya untuk mencocokkan input dan memberi tahu pengguna bahwa waktu habis telah terjadi dalam metode pencocokan pola ekspresi reguler. Jika memungkinkan, informasi tentang pola ekspresi reguler, yang tersedia dari Pattern properti, dan input yang menyebabkan backtracking yang berlebihan, yang tersedia dari Input properti, harus dicatat sehingga masalah dapat diselidiki dan pola ekspresi reguler dimodifikasi. Waktu habis karena backtracking yang berlebihan selalu dapat direproduksi.
Jika waktu habis menghasilkan pengaturan ambang batas waktu habis terlalu rendah, Anda dapat meningkatkan interval waktu habis dan mencoba kembali operasi yang cocok. Interval waktu habis saat ini tersedia dari MatchTimeout properti . RegexMatchTimeoutException Ketika pengecualian dilemparkan, mesin ekspresi reguler mempertahankan statusnya sehingga pemanggilan di masa mendatang mengembalikan hasil yang sama, seolah-olah pengecualian tidak terjadi. Pola yang direkomendasikan adalah menunggu interval waktu acak singkat setelah pengecualian dilemparkan sebelum memanggil metode pencocokan lagi. Ini dapat diulang beberapa kali. Namun, jumlah pengulangan harus kecil jika waktu habis disebabkan oleh backtracking yang berlebihan.
Contoh di bagian berikutnya mengilustrasikan kedua teknik untuk menangani RegexMatchTimeoutException.
Konstruktor
| Nama | Deskripsi |
|---|---|
| RegexMatchTimeoutException() |
Menginisialisasi instans RegexMatchTimeoutException baru kelas dengan pesan yang disediakan sistem. |
| RegexMatchTimeoutException(SerializationInfo, StreamingContext) |
Kedaluwarsa.
Menginisialisasi instans RegexMatchTimeoutException baru kelas dengan data berseri. |
| RegexMatchTimeoutException(String, Exception) |
Menginisialisasi instans RegexMatchTimeoutException baru kelas dengan pesan kesalahan tertentu dan referensi ke pengecualian dalam yang merupakan penyebab pengecualian ini. |
| RegexMatchTimeoutException(String, String, TimeSpan) |
Menginisialisasi instans RegexMatchTimeoutException baru kelas dengan informasi tentang pola ekspresi reguler, teks input, dan interval waktu habis. |
| RegexMatchTimeoutException(String) |
Menginisialisasi instans RegexMatchTimeoutException baru kelas dengan string pesan yang ditentukan. |
Properti
| Nama | Deskripsi |
|---|---|
| Data |
Mendapatkan kumpulan pasangan kunci/nilai yang memberikan informasi tambahan yang ditentukan pengguna tentang pengecualian. (Diperoleh dari Exception) |
| HelpLink |
Mendapatkan atau mengatur tautan ke file bantuan yang terkait dengan pengecualian ini. (Diperoleh dari Exception) |
| HResult |
Mendapatkan atau mengatur HRESULT, nilai numerik berkode yang ditetapkan ke pengecualian tertentu. (Diperoleh dari Exception) |
| InnerException |
Mendapatkan instans Exception yang menyebabkan pengecualian saat ini. (Diperoleh dari Exception) |
| Input |
Mendapatkan teks input yang diproses mesin ekspresi reguler saat waktu habis terjadi. |
| MatchTimeout |
Mendapatkan interval waktu habis untuk kecocokan ekspresi reguler. |
| Message |
Mendapatkan pesan yang menjelaskan pengecualian saat ini. (Diperoleh dari Exception) |
| Pattern |
Mendapatkan pola ekspresi reguler yang digunakan dalam operasi pencocokan saat waktu habis terjadi. |
| Source |
Mendapatkan atau mengatur nama aplikasi atau objek yang menyebabkan kesalahan. (Diperoleh dari Exception) |
| StackTrace |
Mendapatkan representasi string dari bingkai langsung pada tumpukan panggilan. (Diperoleh dari Exception) |
| TargetSite |
Mendapatkan metode yang melemparkan pengecualian saat ini. (Diperoleh dari Exception) |
Metode
| Nama | Deskripsi |
|---|---|
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| GetBaseException() |
Ketika ditimpa di kelas turunan, mengembalikan Exception yang merupakan akar penyebab dari satu atau beberapa pengecualian berikutnya. (Diperoleh dari Exception) |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Kedaluwarsa.
Saat ditimpa di kelas turunan, mengatur SerializationInfo dengan informasi tentang pengecualian. (Diperoleh dari Exception) |
| GetType() |
Mendapatkan jenis runtime instans saat ini. (Diperoleh dari Exception) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ToString() |
Membuat dan mengembalikan representasi string dari pengecualian saat ini. (Diperoleh dari Exception) |
Acara
| Nama | Deskripsi |
|---|---|
| SerializeObjectState |
Kedaluwarsa.
Terjadi ketika pengecualian diserialisasikan untuk membuat objek status pengecualian yang berisi data berseri tentang pengecualian. (Diperoleh dari Exception) |
Implementasi Antarmuka Eksplisit
| Nama | Deskripsi |
|---|---|
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Mengisi objek dengan data yang SerializationInfo diperlukan untuk membuat RegexMatchTimeoutException serialisasi objek. |