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

Şunlara uygulanır

Ayrıca bkz.