Skip to content

Commit cace332

Browse files
committed
Improves regex parsing performance
Adds RegexOptions.Compiled to static regex parsers to improve performance. Part of datemath feature.
1 parent 1d2765d commit cace332

17 files changed

+20
-20
lines changed

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/ExplicitDateFormatParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers;
77
[Priority(30)]
88
public class ExplicitDateFormatParser : IFormatParser
99
{
10-
private static readonly Regex _parser = new(@"^\s*(?<date>\d{4}-\d{2}-\d{2}(?:T(?:\d{2}\:\d{2}\:\d{2}(?:\.\d{3})?|\d{2}\:\d{2}|\d{2})Z?)?)\s*$");
10+
private static readonly Regex _parser = new(@"^\s*(?<date>\d{4}-\d{2}-\d{2}(?:T(?:\d{2}\:\d{2}\:\d{2}(?:\.\d{3})?|\d{2}\:\d{2}|\d{2})Z?)?)\s*$", RegexOptions.Compiled);
1111

1212
public DateTimeRange Parse(string content, DateTimeOffset relativeBaseTime)
1313
{

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/MonthDayFormatParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers;
66
[Priority(50)]
77
public class MonthDayFormatParser : IFormatParser
88
{
9-
private static readonly Regex _parser = new(@"^\s*(?<month>\d{2})-(?<day>\d{2})\s*$");
9+
private static readonly Regex _parser = new(@"^\s*(?<month>\d{2})-(?<day>\d{2})\s*$", RegexOptions.Compiled);
1010

1111
public DateTimeRange Parse(string content, DateTimeOffset relativeBaseTime)
1212
{

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/MonthFormatParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers;
66
[Priority(60)]
77
public class MonthFormatParser : MonthRelationFormatParser
88
{
9-
private static readonly Regex _parser = new(String.Format(@"^\s*(?<month>{0})\s*$", Helper.GetMonthNames()), RegexOptions.IgnoreCase);
9+
private static readonly Regex _parser = new(String.Format(@"^\s*(?<month>{0})\s*$", Helper.GetMonthNames()), RegexOptions.Compiled | RegexOptions.IgnoreCase);
1010

1111
public override DateTimeRange Parse(string content, DateTimeOffset relativeBaseTime)
1212
{

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/MonthRelationFormatParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers;
66
[Priority(40)]
77
public class MonthRelationFormatParser : IFormatParser
88
{
9-
private static readonly Regex _parser = new(String.Format(@"^\s*(?<relation>{0})\s+(?<month>{1})\s*$", Helper.RelationNames, Helper.GetMonthNames()), RegexOptions.IgnoreCase);
9+
private static readonly Regex _parser = new(String.Format(@"^\s*(?<relation>{0})\s+(?<month>{1})\s*$", Helper.RelationNames, Helper.GetMonthNames()), RegexOptions.Compiled | RegexOptions.IgnoreCase);
1010

1111
public virtual DateTimeRange Parse(string content, DateTimeOffset relativeBaseTime)
1212
{

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/NamedDayFormatParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers;
66
[Priority(20)]
77
public class NamedDayFormatParser : IFormatParser
88
{
9-
private static readonly Regex _parser = new(@"^\s*(?<name>today|yesterday|tomorrow)\s*$", RegexOptions.IgnoreCase);
9+
private static readonly Regex _parser = new(@"^\s*(?<name>today|yesterday|tomorrow)\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
1010

1111
public DateTimeRange Parse(string content, DateTimeOffset relativeBaseTime)
1212
{

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/PartParsers/AmountTimeRelationPartParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers.PartParsers;
66
[Priority(20)]
77
public class AmountTimeRelationPartParser : IPartParser
88
{
9-
private static readonly Regex _parser = new(String.Format(@"\G(?<amount>\d+)\s+(?<size>{0})\s+(?<relation>ago|from now)", Helper.AllTimeNames), RegexOptions.IgnoreCase);
9+
private static readonly Regex _parser = new(String.Format(@"\G(?<amount>\d+)\s+(?<size>{0})\s+(?<relation>ago|from now)", Helper.AllTimeNames), RegexOptions.Compiled | RegexOptions.IgnoreCase);
1010
public virtual Regex Regex => _parser;
1111

1212
public virtual DateTimeOffset? Parse(Match match, DateTimeOffset relativeBaseTime, bool isUpperLimit)

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/PartParsers/ExplicitDatePartParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers.PartParsers;
77
[Priority(50)]
88
public class ExplicitDatePartParser : IPartParser
99
{
10-
private static readonly Regex _parser = new(@"\G(?<date>\d{4}-\d{2}-\d{2}(?:T(?:\d{2}\:\d{2}\:\d{2}(?:\.\d{3})?|\d{2}\:\d{2}|\d{2})Z?)?)");
10+
private static readonly Regex _parser = new(@"\G(?<date>\d{4}-\d{2}-\d{2}(?:T(?:\d{2}\:\d{2}\:\d{2}(?:\.\d{3})?|\d{2}\:\d{2}|\d{2})Z?)?)", RegexOptions.Compiled);
1111
public Regex Regex => _parser;
1212

1313
public DateTimeOffset? Parse(Match match, DateTimeOffset relativeBaseTime, bool isUpperLimit)

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/PartParsers/MonthDayPartParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers.PartParsers;
66
[Priority(60)]
77
public class MonthDayPartParser : IPartParser
88
{
9-
private static readonly Regex _parser = new(@"\G(?<month>\d{2})-(?<day>\d{2})");
9+
private static readonly Regex _parser = new(@"\G(?<month>\d{2})-(?<day>\d{2})", RegexOptions.Compiled);
1010
public Regex Regex => _parser;
1111

1212
public DateTimeOffset? Parse(Match match, DateTimeOffset relativeBaseTime, bool isUpperLimit)

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/PartParsers/MonthPartParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers.PartParsers;
66
[Priority(40)]
77
public class MonthPartParser : MonthRelationPartParser
88
{
9-
private static readonly Regex _parser = new(String.Format(@"\G(?<month>{0})", Helper.GetMonthNames()), RegexOptions.IgnoreCase);
9+
private static readonly Regex _parser = new(String.Format(@"\G(?<month>{0})", Helper.GetMonthNames()), RegexOptions.Compiled | RegexOptions.IgnoreCase);
1010
public override Regex Regex => _parser;
1111

1212
public override DateTimeOffset? Parse(Match match, DateTimeOffset relativeBaseTime, bool isUpperLimit)

src/Exceptionless.DateTimeExtensions/FormatParsers/FormatParsers/PartParsers/MonthRelationPartParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Exceptionless.DateTimeExtensions.FormatParsers.PartParsers;
66
[Priority(30)]
77
public class MonthRelationPartParser : IPartParser
88
{
9-
private static readonly Regex _parser = new(String.Format(@"\G(?<relation>{0})\s+(?<month>{1})", Helper.RelationNames, Helper.GetMonthNames()), RegexOptions.IgnoreCase);
9+
private static readonly Regex _parser = new(String.Format(@"\G(?<relation>{0})\s+(?<month>{1})", Helper.RelationNames, Helper.GetMonthNames()), RegexOptions.Compiled | RegexOptions.IgnoreCase);
1010
public virtual Regex Regex => _parser;
1111

1212
public virtual DateTimeOffset? Parse(Match match, DateTimeOffset relativeBaseTime, bool isUpperLimit)

0 commit comments

Comments
 (0)