gpt4 book ai didi

c# - 解析文件中文本的代码减慢到停止 c#

转载 作者:太空狗 更新时间:2023-10-30 01:09:14 25 4
gpt4 key购买 nike

 private static void BuildDictionaryOfRequires(Regex exp, Dictionary<string, string> dictionary, DirectoryInfo dir)
{
var i = 0;
var total = dir.EnumerateFiles("*.*", SearchOption.AllDirectories).
Where(x => x.Extension == ".aspx" || x.Extension == ".ascx").Count();
foreach (var item in dir.EnumerateFiles("*.*", SearchOption.AllDirectories).
Where(x => x.Extension == ".aspx" || x.Extension == ".ascx"))
{
#if DEBUG
Stopwatch sw = Stopwatch.StartNew();
#endif

var text = File.ReadAllText(item.FullName);

MatchCollection matches = exp.Matches(text);
foreach (Match match in matches)
{
var matchValue = match.Groups[0].Value;

if (dictionary.ContainsKey(matchValue))
{
dictionary[matchValue] = string.Format("{0},{1}", dictionary[matchValue], item.Name);
}
else
{
dictionary.Add(matchValue, item.Name);
}
}

Console.WriteLine(string.Format("Found matches in {0}.", item.Name));

#if DEBUG
sw.Stop();
Console.WriteLine("Time used (float): {0} ms", sw.Elapsed.TotalMilliseconds);
#endif


Console.WriteLine(string.Format("{0} of {1}", (++i).ToString(), total));
}
}

lambda 找到了大约 232 个文件。它顺利通过 160,然后爬行。我现在正在分析代码,但想知道是否有明显的错误。

正则表达式是

    Regex exp = new Regex(@"dojo\.require\([""'][\w\.]+['""]\);?", RegexOptions.IgnoreCase | RegexOptions.Compiled);

所有文件的长度和结构都相似。

大多数文件耗时不到 30 毫秒,但有些文件耗时 11251 毫秒。

使用更新的正则表达式,整个过程现在需要 1700 毫秒。呸!

最佳答案

尝试简化您的正则表达式:

Regex exp = new Regex(@"dojo\.require\([""'][\w\.]+[""']\)", RegexOptions.IgnoreCase | RegexOptions.Compiled);

更新:如果您想匹配您的示例,请删除末尾的分号。

关于c# - 解析文件中文本的代码减慢到停止 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com