小软在努力

希望明天会更好

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  8 随笔 :: 0 文章 :: 11 评论 :: 0 引用

做压力测试的时候,为了分析log日志文件的信息,做了个统计小工具,功能很简单,就是统计指定文件中指定字串出现的个数。基于log文件的格式,要查找的关键字在一行内出现,不会跨行查找的。

这个功能很简单,很快的写出了代码:

Using sr As StreamReader = New StreamReader(txtFile.Text)
      
Str = sr.ReadToEnd
      i 
= (Str.Length - Str.Replace(strkey1, "").Length) / strkey1.Length
      sr.Close()
End Using

选择一个1MBlog文件,OK,统计正确,再选择一个100MBlog文件,呜~~机器太破,跑死了。

唉,性能啊!应用程序的性能问题就出来了,也可以说,计算方法正确,但在现有的环境下无法得出正确的结果,好吧,只好牺牲时间换空间了,改为逐行处理,代码如下:

Using sr As StreamReader = New StreamReader(txtFile.Text)
Do
            
str = sr.ReadLine
            strtotal 
= str.Replace(strkey, "")
            
If strtotal.Length <> str.Length Then
                 i 
+= (str.Length - strtotal.Length) / strkey.Length
            
End If
Loop Until str Is Nothing
sr.Close()
End Using

    这样一来,虽然得出统计结果的时间长了点,但不管多大的文件,都能统计出结果了,一个好的算法,虽然能以最快的速度得出答案,但却不能保证在任何情况下都能得出答案,这就是为什么要做性能测试的问题。对于应用程序性能的改进,其实还是有必要好好研究研究的。关键是,要先找出瓶颈在哪里。比如上面的例子,瓶颈就在于一次全部加载100MB的文件,是个很消耗内存的操作,改为逐行加载,就解决了这个问题。
posted on 2006-04-28 16:31 小软 阅读(1158) 评论(2)  编辑 收藏 网摘

评论

先把log文件读到一个数组里再对数组分析是不是更快?内存总比硬盘缓存快吧
  回复  引用    

#2楼  2006-04-28 18:39 达达      
@YngwieWang
呵呵,你没看完文章吧,楼主就是再说他牺牲时间换取空间啊
  回复  引用  查看    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-05-25 09:48 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接: