Aracılığıyla paylaş


RegexMatchTimeoutException Sınıf

Tanım

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
RegexMatchTimeoutException
Devralma
RegexMatchTimeoutException
Ö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 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 küçükse 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 deseni ile 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 yöntemi, özel durumun nedene 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 konusunda bilgilendirmelidir. Mümkünse, özelliğinden kullanılabilen normal ifade deseni ve özelliğinden PatternInput kullanılabilen aşırı geri izlenmeye 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 üretilebilir.

  • Zaman aşımı, zaman aşımı eşiğinin çok düşük ayarlanmasıyla sonuçlanı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 çağrılar, özel durum oluşmamış gibi aynı sonucu döndürür. Önerilen düzen, 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

Name Description
RegexMatchTimeoutException()

Sistem tarafından sağlanan bir iletiyle sınıfının yeni bir örneğini RegexMatchTimeoutException başlatır.

RegexMatchTimeoutException(SerializationInfo, StreamingContext)
Geçersiz.

Serileştirilmiş verilerle sınıfının yeni bir örneğini RegexMatchTimeoutException başlatır.

RegexMatchTimeoutException(String, Exception)

Sınıfın RegexMatchTimeoutException yeni bir örneğini belirtilen bir hata iletisiyle ve bu özel durumun nedeni olan iç özel duruma başvuruyla başlatır.

RegexMatchTimeoutException(String, String, TimeSpan)

Normal ifade deseni RegexMatchTimeoutException , giriş metni ve zaman aşımı aralığı hakkındaki bilgilerle sınıfının yeni bir örneğini başlatır.

RegexMatchTimeoutException(String)

Belirtilen ileti dizesiyle sınıfının yeni bir örneğini RegexMatchTimeoutException başlatır.

Özellikler

Name Description
Data

Özel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan anahtar/değer çiftleri koleksiyonunu 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

Exception Geçerli özel duruma 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

Name Description
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)
Geçersiz.

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 Objectbasit 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

Name Description
SerializeObjectState
Geçersiz.

Özel durum hakkında serileştirilmiş veriler içeren bir özel durum durumu nesnesi oluşturmak için bir özel durum seri hale getirildiğinde gerçekleşir.

(Devralındığı yer: Exception)

Belirtik Arabirim Kullanımları

Name Description
ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Bir SerializationInfo nesneyi seri hale RegexMatchTimeoutException getirmek için gereken verilerle doldurur.

Şunlara uygulanır

Ayrıca bkz.