本人在优化程序时遇到了三个问题,小弟经验尚浅自学中,无法解决特来请教大家。
问题1:我用正则过滤HTML标签时有时会突然报很高的CPU使用率,不知道原因所在!如果有知道的问题说一下,或者除了正则还有其他可以快速过滤HTML标签吗?
问题2:在启程VS2010的性能分析时,有一个clr.dll也是占了不少CPU资源。我记得clr是资源回收机制,请问这个有什么办法可以解决吗?小弟用的是NET4.0
问题3:我有读取本地txt文本为string类型,文本中是文章还是挺长的,另外我有一个替换词库大约有一万多词。循环去判断读取的txt文章中有没有包含替换词的词语,我使用的是string的Contains方法,感觉效果不理想,文章短时还没有什么,文章长时可能要消耗40左右的CPU。而朋友叫我用IndexOf方法那个更离谱十接百分百CPU,请问有没有较合理的方法。
在程序中CPU资源占用高,一般不用理会,只需要管程序运行的时间,CLR的你就更加不用管了,他自动管理的。
如果1、3问题执行时间较长,可以使用字符串算法进行优化。
第一个问题不懂,第二个问题应该是没办法解决的
第三个问题,我的想法是这样的
1、取一个词(英文按空格来分割,中文的话就要涉及语义分析了)
2、获取这个词的长度与首字母\尾字母
3、查询你的替换词库中长度\首字母\尾字母与词相同的词汇
4、之后再精确搜索
优化啥,能正常运行不出错就行了。
大哥,有同感啊,目前我们项目也是这样滴,能正常运行就不错了。
优化啥,能正常运行不出错就行了。 只要没有死循环就由着它吧。。。。
1. 正则可以先compile下
3. 可以用 StringBuilder, 性能应该会好些
StringBuilder b = new StringBuilder(s); b.Replace("This", "That");
楼上都提的很全面了,你可以在百度里查一上。还是有许多细节要注意的。
1.正则是过滤Html较为快捷和方便的方式了,请贴出楼主写的正则表达式,以查看错误。
2.没接触。
3.个人认为:
1.将txt文本分段读取(分多大,怎样分,什么时候分 视txt定)到多个内存块中。(假设您一次处理的txt不是很多,内存足够用)
2.如果您仅仅是查找或替换词的话,那么还是建议您直接用正则表达式匹配比较快,
indexOf或Contais对于短的String查找很方便,所以我们不用正则,但很长的字符串这两个方法都是要便利与比较整个字符串的。这种情况刚好是正则的用处。
是的我想过正则,,不过就是第一个问题,,,我看性能分析时一个简单的语句循环正则的时候会有很高的CPU我上几段代码看看。。
reg = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match m = reg.Match(html);
while (m.Success)
{
new_string += m.Value + "\r\n";
System.Threading.Thread.Sleep(10);
m = m.NextMatch();
}
//MatchCollection m = reg.Matches(html);
//foreach (Match n in m)
//{
// new_string += n.Value + "\r\n";
//}
//for (int i = 0; i < m.Count; i++)
//{
// new_string += m[i].Value + "\r\n";
//
//}
上面三个遍历形式。m.NextMatch(); ,m.Count ,n 这三个地方我有较高的占CPU。我用的是NET我不知道我要不要换成3.5
同一个问题会有多种正则的解决方法,应写最优的正则。兄弟,我是正则高手,也许能帮到你。
谢谢朋友,,我可以给一个过滤html标签但要保留IMG标签。主要是性能有些特别的HTML代码CPU就卡得高