RegexMatchTimeoutException Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Normal ifade desen eşleştirme yönteminin yürütme süresi zaman aşımı aralığını aştığında oluşan özel durum.
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
- Devralma
- Devralma
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki örnekte, özel durumu işlemeye yönelik iki olası yaklaşım gösterilmektedir RegexMatchTimeoutException . Değeri iki saniye olan bir sabit, maksimum zaman aşımı aralığını tanımlar. Regex.IsMatch(String, String, RegexOptions, TimeSpan) yöntemi başlangıçta bir saniyelik zaman aşımı aralığıyla çağrılır. Her RegexMatchTimeoutException özel durum, zaman aşımı aralığının bir saniye artırılmasına neden olur ve geçerli zaman aşımı aralığı en fazla zaman aşımı aralığından azsa yöntemine başka bir çağrıyla Regex.IsMatch sonuçlanır. Ancak, geçerli zaman aşımı aralığı maksimum zaman aşımı aralığını aşarsa, özel durum işleyicisi olay günlüğüne bilgi yazar ve normal ifadenin işlenmesini bırakır.
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.
Açıklamalar
Bir özel durumun varlığı RegexMatchTimeoutException genellikle aşağıdaki koşullardan birini gösterir:
Normal ifade altyapısı, giriş metnini normal ifade düzeniyle eşleştirmeye çalıştığından aşırı geri izleniyor.
Zaman aşımı aralığı, özellikle de yüksek makine yüküne göre çok düşük ayarlanmıştır.
Özel durum işleyicisinin bir özel durumu işleme şekli, özel durumun nedenlerine bağlıdır:
Zaman aşımı aşırı geri izlemeden kaynaklanırsa, özel durum işleyiciniz girişle eşleştirme denemesini bırakmalı ve kullanıcıya normal ifade desen eşleştirme yönteminde bir zaman aşımı oluştuğu bilgisini vermelidir. Mümkünse, özelliğinden kullanılabilen normal ifade deseni ve özelliğinden PatternInput kullanılabilen aşırı geri izlemeye neden olan giriş hakkındaki bilgiler, sorunun araştırılabilmesi ve normal ifade deseninin değiştirilebilmesi için günlüğe kaydedilmelidir. Aşırı geri izleme nedeniyle zaman aşımları her zaman yeniden oluşturulabilir.
Zaman aşımı, zaman aşımı eşiğinin çok düşük ayarlanmasından kaynaklanırsa, zaman aşımı aralığını artırabilir ve eşleşen işlemi yeniden deneyebilirsiniz. Geçerli zaman aşımı aralığı özelliğinden MatchTimeout kullanılabilir. Bir RegexMatchTimeoutException özel durum oluşturulduğunda, normal ifade altyapısı durumunu korur, böylece gelecekteki tüm çağrılar, özel durum oluşmamış gibi aynı sonucu döndürür. Önerilen desen, eşleşen yöntemi yeniden çağırmadan önce özel durum oluşturulduktan sonra kısa ve rastgele bir zaman aralığı beklemektir. Bu birkaç kez tekrarlanabilir. Ancak, zaman aşımının aşırı geri izlemeden kaynaklanması durumunda yineleme sayısı küçük olmalıdır.
Sonraki bölümdeki örnekte, bir RegexMatchTimeoutExceptionişlemeye yönelik her iki teknik gösterilmektedir.
Oluşturucular
RegexMatchTimeoutException() |
Sistem tarafından sağlanan bir iletiyle sınıfının yeni bir örneğini RegexMatchTimeoutException başlatır. |
RegexMatchTimeoutException(SerializationInfo, StreamingContext) |
RegexMatchTimeoutException sınıfının yeni bir örneğini serileştirilmiş verilerle başlatır. |
RegexMatchTimeoutException(String) |
Belirtilen ileti dizesiyle sınıfının yeni bir örneğini RegexMatchTimeoutException başlatır. |
RegexMatchTimeoutException(String, Exception) |
Belirtilen bir hata iletisi ve bu özel durumun nedeni olan iç özel duruma başvuru ile sınıfının yeni bir örneğini RegexMatchTimeoutException başlatır. |
RegexMatchTimeoutException(String, String, TimeSpan) |
Normal ifade deseni RegexMatchTimeoutException , giriş metni ve zaman aşımı aralığı hakkında bilgilerle sınıfının yeni bir örneğini başlatır. |
Özellikler
Data |
Özel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan bir anahtar/değer çifti koleksiyonu alır. (Devralındığı yer: Exception) |
HelpLink |
Bu özel durumla ilişkili yardım dosyasının bağlantısını alır veya ayarlar. (Devralındığı yer: Exception) |
HResult |
Belirli bir özel duruma atanan kodlanmış sayısal bir değer olan HRESULT değerini alır veya ayarlar. (Devralındığı yer: Exception) |
InnerException |
Geçerli özel duruma Exception neden olan örneği alır. (Devralındığı yer: Exception) |
Input |
Zaman aşımı oluştuğunda normal ifade altyapısının işlemekte olduğu giriş metnini alır. |
MatchTimeout |
Normal ifade eşleşmesi için zaman aşımı aralığını alır. |
Message |
Geçerli özel durumu açıklayan bir ileti alır. (Devralındığı yer: Exception) |
Pattern |
Zaman aşımı oluştuğunda eşleşen işlemde kullanılan normal ifade desenini alır. |
Source |
Hataya neden olan uygulamanın veya nesnenin adını alır veya ayarlar. (Devralındığı yer: Exception) |
StackTrace |
Çağrı yığınındaki anlık çerçevelerin dize gösterimini alır. (Devralındığı yer: Exception) |
TargetSite |
Geçerli özel durumu oluşturan yöntemini alır. (Devralındığı yer: Exception) |
Yöntemler
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetBaseException() |
Türetilmiş bir sınıfta geçersiz kılındığında, sonraki bir veya daha fazla özel durumun kök nedeni olan değerini döndürür Exception . (Devralındığı yer: Exception) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Türetilmiş bir sınıfta geçersiz kılındığında, özel durum hakkındaki bilgilerle öğesini ayarlar SerializationInfo . (Devralındığı yer: Exception) |
GetType() |
Geçerli örneğin çalışma zamanı türünü alır. (Devralındığı yer: Exception) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli özel durumun dize gösterimini oluşturur ve döndürür. (Devralındığı yer: Exception) |
Ekinlikler
SerializeObjectState |
Geçersiz.
Bir özel durum, özel durum hakkında serileştirilmiş veriler içeren bir özel durum nesnesi oluşturmak üzere seri hale getirildiğinde gerçekleşir. (Devralındığı yer: Exception) |
Belirtik Arabirim Kullanımları
ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Bir nesneyi, bir SerializationInfo nesneyi seri hale RegexMatchTimeoutException getirmek için gereken verilerle doldurur. |