Loveyuki's BLOG

L-BLOG.NET, The Matrix Reloaded.

标签:.NET 2.0
.NET 2.0 中慎用 RegexOptions.Compiled
Loveyuki | 学习笔记 | 2008-03-13 22:59 | 1025 点击 | 22 评论 | .NET 2.0正则表达式效率优化

Bitrac 一直以来都有一个很头疼的问题,就是执行时间竟然有 300 多毫秒,虽然感官上速度并不是很明显的慢,但是看到 300 毫秒的时间还是让我这个开发者头疼,以前写 L-BLOG 执行时间也才是 100 毫秒左右而已,.NET 不会比 ASP 速度更慢的,因为以前写 Geekera 的时候执行时间只有 30 毫秒而已。用 JetBrains dotTrace 跟踪了一下程序的执行发现 URLRewrite 和 模板引擎的正则速度超级慢,一直以来也没想出哪里出了问题。今天试着把正则的 RegexOptions.Compiled 选项去掉以后,发现正则的速度提高了好多好多,上 MSDN 看了下 RegexOptions.Compiled 的选项意思,写的也很明白:指定将正则表达式编译为程序集。这会产生更快的执行速度,但会增加启动时间。但是具体啥意思还真没弄明白,后来用 Google 搜索了一下,看到一篇文章:http://blog.livid.cn/zackzhu/200711/thinking/17_395.html 终于弄明白了这个选项的具体意思。

Bitrac 现在最头疼的问题已经解决了,心情那个舒服啊。另外还有一个小问题就是有时候第一次启动会报错误,看错误日志是个数据库文件 IO 方面的错误,估计跟数据库文件的锁定有关系,有机会查查资料,看到底是什么问题。这个问题出现后,一般刷新一下就可以了……真奇怪。

如果你遇到同样的问题,希望这篇文章能带给你些许帮助,如果你有更好的方法或者解释,希望留言告诉我。

.NET 2.0 中 Hashtable 快速查找的方法
Loveyuki | 原创作品 | 2007-11-24 16:13 | 838 点击 | 2 评论 | .NET 2.0HashTable

一般来说我们都是用 Hashtable 的 ContainsKey 方法来查找 Hashtable 中是否存在某个键值然后读取他,但是这个方法并不是效率最好的方法。比较好的方法是直接读取键值然后判断这个对象是否为 null 然后读取。两种代码分别如下:

  1. 一般慢速的方法:if (objHash.ContainsKey(keyValue))
    {
        strValue=(String)objHash[keyValue]; 
    }
  2. 而快速的方法是:Object objValue=objHash[keyValue];
    if (objValue!=null)
    {
        strValue=(String)objValue;
    }
 

版权所有©2007-2008, Loveyuki.com | 系统:Bitrac | 皮肤:Blog Pixel | 空间域名:光辉互联,易联网络