C# 用于提取存储过程名称的更快的正则表达式
我有这个存储过程并给出了一个表名(例如:“C# 用于提取存储过程名称的更快的正则表达式,c#,regex,C#,Regex,我有这个存储过程并给出了一个表名(例如:“usercompanygroup\u tbl”)。我必须提取使用给定表名的存储过程名。 我正在使用正则表达式CREATE PROCEDURE\\s*(?.*\n)(.|\n)*usercompanygroup\u tbl从下面给定的示例.sql文件中提取存储过程,它的执行速度非常慢 我必须在一个大小为GB的目录中对多个文件执行搜索。结果是非常缓慢的。我需要一个更快的正则表达式来提取过程名 我使用的是C#regex引擎 USE [BI] GO
usercompanygroup\u tbl
”)。我必须提取使用给定表名的存储过程名。我正在使用正则表达式
CREATE PROCEDURE\\s*(?.*\n)(.|\n)*usercompanygroup\u tbl
从下面给定的示例.sql文件中提取存储过程,它的执行速度非常慢
我必须在一个大小为GB的目录中对多个文件执行搜索。结果是非常缓慢的。我需要一个更快的正则表达式来提取过程名
我使用的是C#regex引擎
USE [BI]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ActiveUsersRelatedCompanies_prc]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ActiveUsersRelatedCompanies_prc]
GO
CREATE PROCEDURE [dbo].[ActiveUsersRelatedCompanies_prc]
@Usercompanyid INT
AS
Begin
select *
FROM dbo.ActiveUsersRelatedCompanies_tbl (NOLOCK)
WHERE userCompanyId in (
select ucg2.userCompanyId
from `userCompanyGrouping_tbl` u
inner join userCompanyGrouping_tbl ucg2
on isNull(u.subParentCompanyId,u.parentCompanyId) =
(case when u.subParentCompanyId is not null then ucg2.subParentCompanyId
else ucg2.parentCompanyId end)
where u.userCompanyId = @userCompanyID
)
order by userCompanyName, userGroup, fullName
END
如上所述,以下正则表达式将更好:
^\s*[^(--)]{0}(CREATE +PROCEDURE|ALTER +PROCEDURE)\s+(?<ParentProcName>(\w|_|\[|\]|\.)*)
^\s*[^(-)]{0}(创建+过程|更改+过程)\s+(?(\w | | | | \[| \]| \)*)
“ParentProcName”将捕获已创建或更改的存储过程的名称。首先想到的是:如果符合您的要求,请尝试在regexp的开头添加
^\s*
。@Smileek它不符合我的要求:(你确定正则表达式是你的瓶颈吗?驱动器I/O如何?你是否使用了一些性能分析来证实你的假设?:)@Luaan for IO我正在使用“var txtFiles=Directory.EnumerateFiles(sourceDirectory,“.”,SearchOption.AllDirectories);“读取目录中的文件……所以我认为这是一个大问题