首页 / C# / 解析文件中文本的代码减慢到停止c#
解析文件中文本的代码减慢到停止c#
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解析文件中文本的代码减慢到停止c#,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1575字,纯文字阅读大概需要3分钟。
内容图文
![解析文件中文本的代码减慢到停止c#](/upload/InfoBanner/zyjiaocheng/799/5279a67fbd294a46a67960a063aef30d.jpg)
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#所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。