首页 新闻 会员 周边 捐助

关于C#程序优化的一些问题

0
悬赏园豆:100 [待解决问题]

本人在优化程序时遇到了三个问题,小弟经验尚浅自学中,无法解决特来请教大家。

问题1:我用正则过滤HTML标签时有时会突然报很高的CPU使用率,不知道原因所在!如果有知道的问题说一下,或者除了正则还有其他可以快速过滤HTML标签吗?

 

问题2:在启程VS2010的性能分析时,有一个clr.dll也是占了不少CPU资源。我记得clr是资源回收机制,请问这个有什么办法可以解决吗?小弟用的是NET4.0

 

问题3:我有读取本地txt文本为string类型,文本中是文章还是挺长的,另外我有一个替换词库大约有一万多词。循环去判断读取的txt文章中有没有包含替换词的词语,我使用的是string的Contains方法,感觉效果不理想,文章短时还没有什么,文章长时可能要消耗40左右的CPU。而朋友叫我用IndexOf方法那个更离谱十接百分百CPU,请问有没有较合理的方法。

恨天氏的主页 恨天氏 | 初学一级 | 园豆:16
提问于:2012-07-31 17:20
< >
分享
所有回答(8)
0

在程序中CPU资源占用高,一般不用理会,只需要管程序运行的时间,CLR的你就更加不用管了,他自动管理的。

如果1、3问题执行时间较长,可以使用字符串算法进行优化。

az235 | 园豆:8483 (大侠五级) | 2012-07-31 17:29
0

第一个问题不懂,第二个问题应该是没办法解决的

第三个问题,我的想法是这样的

1、取一个词(英文按空格来分割,中文的话就要涉及语义分析了)

2、获取这个词的长度与首字母\尾字母

3、查询你的替换词库中长度\首字母\尾字母与词相同的词汇

4、之后再精确搜索

CrazyJinn | 园豆:799 (小虾三级) | 2012-07-31 17:41
1

优化啥,能正常运行不出错就行了。

Launcher | 园豆:45050 (高人七级) | 2012-07-31 18:08

大哥,有同感啊,目前我们项目也是这样滴,能正常运行就不错了。

支持(0) 反对(1) icyme | 园豆:77 (初学一级) | 2012-08-01 11:28
0

优化啥,能正常运行不出错就行了。 只要没有死循环就由着它吧。。。。

Angkor--:-- | 园豆:1086 (小虾三级) | 2012-07-31 23:57
0

1. 正则可以先compile下

3. 可以用 StringBuilder,  性能应该会好些

StringBuilder b = new StringBuilder(s);
b.Replace("This", "That");
gunsmoke | 园豆:3592 (老鸟四级) | 2012-08-01 06:14
0

楼上都提的很全面了,你可以在百度里查一上。还是有许多细节要注意的。

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-08-01 10:05
0

1.正则是过滤Html较为快捷和方便的方式了,请贴出楼主写的正则表达式,以查看错误。

2.没接触。

3.个人认为:

1.将txt文本分段读取(分多大,怎样分,什么时候分 视txt定)到多个内存块中。(假设您一次处理的txt不是很多,内存足够用)

2.如果您仅仅是查找或替换词的话,那么还是建议您直接用正则表达式匹配比较快,

indexOf或Contais对于短的String查找很方便,所以我们不用正则,但很长的字符串这两个方法都是要便利与比较整个字符串的。这种情况刚好是正则的用处。

纯粹的郭子 | 园豆:62 (初学一级) | 2012-08-01 11:41

是的我想过正则,,不过就是第一个问题,,,我看性能分析时一个简单的语句循环正则的时候会有很高的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

   

支持(0) 反对(0) 恨天氏 | 园豆:16 (初学一级) | 2012-08-03 04:13
0

同一个问题会有多种正则的解决方法,应写最优的正则。兄弟,我是正则高手,也许能帮到你。

.NET快速开发框架 | 园豆:946 (小虾三级) | 2012-08-01 13:13

谢谢朋友,,我可以给一个过滤html标签但要保留IMG标签。主要是性能有些特别的HTML代码CPU就卡得高

支持(0) 反对(0) 恨天氏 | 园豆:16 (初学一级) | 2012-08-03 04:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册