小软在努力

希望明天会更好

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

做压力测试的时候,为了分析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  小软  阅读(1479)  评论(2编辑  收藏  举报