۱۳۸۷/۱۱/۰۱

چگونه Regex سريعتري داشته باشيم؟


نكاتي را در هنگام كار با عبارات با قاعده در دات نت بايد رعايت نمود تا بتوان به حداكثر كارآيي و سرعت دست يافت:
  • 1- ايجاد اشياء Regex هزينه بر هستند. براي مثال اگر متد شما كه در آن شيء Regex را ايجاد كرده‌ايد مرتبا فراخواني مي‌شود، اين شيء را به صورت يك متغير محلي خارج از بدنه تابع تعريف كنيد. يا به همين صورت هرگز در يك حلقه اشياء Regex را بارها و بارها ايجاد نكنيد.
  • 2-از گزينه RegexOptions.Compiled استفاده كنيد. با اينكار زمانيكه برنامه شما اجرا مي‌شود، عبارت باقاعده در حافظه كامپايل شده و به بهبود كارآيي 30 درصدي دست خواهيد يافت. اگر از اين گزينه استفاده نشود، هر بار كه شيء Regex مورد استفاده قرار مي‌گيرد، عبارت باقاعده شما همانند يك اسكريپت بايد مجددا تفسير شود.
  • 3- اشياء Regex را از نوع static readonly تعريف كنيد تا بازهم كارآيي را افزايش دهيد (اشيايي ثابت در زمان اجرا و همچنين اشاره‌گري هستند به آن شيء و نه مقدار آن).

خلاصه موارد فوق:

private static readonly Regex _valueFormatMatch = new Regex(@"[0-9]", RegexOptions.Compiled);

بعلاوه اگر نمي‌خواهيد Regex شما هر بار در حين اجراي برنامه (در اولين باري كه برنامه بارگذاري مي‌شود)، كامپايل شود، مي‌توانيد آنرا به درون يك اسمبلي نيز كامپايل كنيد ( Precompilation ). روش انجام اينكار را در اين مقاله مي‌توانيد مشاهده نمائيد.