我用FSO方式读、写文本,用了Do While循环嵌套.
运行时CPU占用99%,运行要耗用很长时间。为什么?

解决方案 »

  1.   

    但程序运行时并不耗内存,只是占用CPU。会不会是文件打开的方式或代码的原因?
      

  2.   

    "Do While"-------不管是什么CPU都是全力以赴.如不想这样,用Timer控件"运行要耗用很长时间"--- 确实有那么多要运算,或,代码不合理.
      

  3.   

    不知道你是如何打开文件的。
    一般我是不用FSO的,我喜欢直接用OPEN来打开文件,这是我的习惯。
      

  4.   

    因为你写文件是时候用循环太长了,所以占用CPU,这正常
      

  5.   

    用OPEN方式打开文件,就没有这个问题吗?
    代码不合理是什么意思?
      

  6.   

    这和变量没有声明有没有关系?用do while循环,怎么使代码合理?
      

  7.   

    hhjjhjhj(大头) :timer控件可以控制Do while吗?如何做?
      

  8.   

    如果你想降低CPU占用,你可以在循环体中增加Do Events 然后调用WinAPI Sleep()函数,让程序执行一系列语句后休眠若干秒即可。
      

  9.   

    不管你用了Do while还是for,无论你是否加了DoEvents,CPU都会全力以赴,这很正常,你可以使用Sleep,但他的缺点是无法响应用户输入。
    所以还是建议Timer控件,或使用API函数SetTimer来达到你的要求。
      

  10.   

    把你写文本的代码贴出来。
    运行时CPU占用99%,运行要耗用很长时间-----------〉说明循环时间长,数据处理复杂或庞大,或有冗余代码,嵌套循环等等....
      

  11.   

    http://vbeden.xg88.com/optimize.htm 
    也许这里有有需要的内容
      

  12.   

    多谢大哥,大姐各位的关心,我的代码如下,请麻烦你们看一下;
    文本1:a.txt(内有n行记录)
    文本2:b.txt(内有n行记录)
    文本3:c.txt(用于写文本)Private fso As New FileSystemObject
    Private fil As File
    Private ts As TextStream
    Private fil1 As File
    Private ts1 As TextStream
    Private fil2 As File
    Private ts2 As TextStreamfso.CreateTextFile ("c.txt")
    Set fil2 = fso.GetFile("c.txt")
    Set ts2 = fil2.OpenAsTextStream(ForAppending)Set fil = fso.GetFile("a.txt")
    Set ts = fil.OpenAsTextStream(ForReading)
    Do While Not ts.AtEndOfStream
       ts_line = ts.readline
       ts_xxx = mid(ts_line,1,1)
       Set fil1 = fso.GetFile("b.txt")
       Set ts1 = fil1.OpenAsTextStream(ForReading)
       Do While Not ts.AtEndOfStream
          ts1_line = ts1.readline
          ts1_xxx = mid(ts1_line,1,1)
          if ts_xxx = ts1_xxx thwn
             ts2.Writeline ts_line
          End if
       Loop
       ts1.close
    Loop         
    ts.close
    ts2.close
      

  13.   

    读文本可以用richtextbox这个控件,速度绝对很快
    工程--部件里microsoft rich textbox control 6.0
      

  14.   

    你循环中加Sleep语句,这样就会好点的
      

  15.   

    不行
    VB中不用sleep?
    用什么?
      

  16.   

    不用SLEEP?你在跟谁较劲?VB还是微软?
    使用一门语言就要遵循它的规则,用while的意思就是循环,中间不允许它休息,又要它会休息,你想怎么着?
      

  17.   

    可能你打开的文件过大,你因将打开文件(DO while...)放入自己创建的另一个线程中运行,使CPU调度分配时间片。
      

  18.   

    smzh8(王新国) 
    我的程序运行后,CPU占用99%,内存占用不多,程序显示未响应,但其实程序在运行,只是运行很慢,为什么?
      

  19.   

    horsefly() 
    麻繁看看我的代码!不胜感激
      

  20.   

    第二层的 Do While 条件写错了,应该是 Not ts1.AtEndOfStream 吧;
    第二层循环中 ts 没有做过 readline 怎么可能到文件结尾呢(除非小于等于一行),死循环,写代码一定要细心。
      

  21.   

    我查了,没有sleep,能给个例子吗?
      

  22.   

    要的是不是这个效果:
    Option ExplicitPrivate Sub Command1_Click()
        Command2.Enabled = False
    End SubPrivate Sub Command2_Click()
        Dim i As Integer
        
        While (Command2.Enabled)
            DoEvents
        Wend
    End Sub
      

  23.   

    Option ExplicitPrivate Fso As New FileSystemObject
    Private Fil As File
    Private Ts As TextStream
    Private Fil1 As File
    Private Ts1 As TextStream
    Private Fil2 As File
    Private Ts2 As TextStreamPrivate Sub Command2_Click()
    Dim TA() As String
    Dim i, ii, Total As Integer
    Dim Ts_line As String
    Total = 200Fso.CreateTextFile ("c.txt")
    Set Fil2 = Fso.GetFile("c.txt")
    Set Ts2 = Fil2.OpenAsTextStream(ForAppending)Set Fil1 = Fso.GetFile("b.txt")
    Set Ts1 = Fil1.OpenAsTextStream(ForReading)
    Do While Not Ts1.AtEndOfStream
        Ts_line = Ts1.readline
        i = i + 1
        If i > Total Then
            Total = Total + 100
            ReDim Preserve TA(Total)
        End If
        TA(i) = Left(Ts_line, 1)
    Loop
    Ts1.CloseSet Fil = Fso.GetFile("a.txt")
    Set Ts = Fil.OpenAsTextStream(ForReading)
    Do While Not Ts.AtEndOfStream
        Ts_line = Ts.readline
        For ii = 1 To i
            If TA(ii) = Left(Ts_line, 1) Then
               Ts2.Writeline Ts_line
            End If
        Next
    Loop
    Ts.Close
    Ts2.Close
    End Sub
    循环体里不要放那么多无用的东西,读A文件一行就读B文件从头到尾一次,你好厉害啊,电脑好也不要这样折腾啊。
      

  24.   

    啊,少了句
    Total = 200后面请自己添加
    ReDim TA(Total)这个程序效果估计应该和你写的一样