请问大家帮忙看看我的代码?为什么接收数据会越来越慢,我是先发送一条命令给我的服务器,然后服务器会返回一些告警信息,大概有几万行的信息。
接收代码如下:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) Static strData, strSend As Byte Winsock.GetData strData, vbString RichTextBox1.Text = RichTextBox1.Text & strData RichTextBox1.SelStart = Len(RichTextBox1.Text)End Sub 

解决方案 »

  1.   

    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
    Dim strData() As Byte
    Dim f As Integer
     ReDim strData(bytesTotal-1)
     Winsock.GetData strData, vbByte
     f=FreeFile()
     open "data" for append as #f
     print #f,StrConv(strData,vbUnicode)
     close #f
    ' RichTextBox1.Text = RichTextBox1.Text & StrConv(strData,vbUnicode)
    ' RichTextBox1.SelStart = Len(RichTextBox1.Text)End Sub
      

  2.   

    Winsock.GetData strData, vbArray + vbByte
      

  3.   

    非常感谢,但是我发现如果用我的方法,直接写进txt文件也是可以的,有没有办法可以显示出接收的文件,但是不影响速度?
      

  4.   

    别用RichTextBox1,用listview控件
      

  5.   

    RichTextBox1的刷新很耗时间
      

  6.   

    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
    dim strData() as byte
    ReDim strData(bytesTotal-1)
    Winsock.GetData strData, vbbyte
    RichTextBox1.Text = RichTextBox1.Text & strconv(strData,vbUnicode)
    RichTextBox1.SelStart = Len(RichTextBox1.Text)
    erase strData
    End Sub 
    试下啦,慢估计是应为你用static声明的静态变量啦
      

  7.   

    我觉得,“越来越慢”的关键原因,还是在于这一句:
    RichTextBox1.Text = RichTextBox1.Text & strData当“文本”内容很多时,后面的那个“字符串运算”耗时会增加(次要因素),对“对象赋值”也会消耗大量时间。
    而楼主的操作会“频繁刷新内容”,必然会显得越来越慢了。也许用qinguangjun123在4楼说的方法,能有所改善。
      

  8.   

    感谢大家的帮助,我找到一个方法,试了可行。分享给大家。Private Const WM_USER = &H400
    Private Const EM_EXSETSEL = (WM_USER + 55)
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_VSCROLL = &H115
    Const SB_BOTTOM = 7
    Const WM_KEYDOWN = &H100
    Const VK_LEFT As Long = &H25Dim txtlen As LongPrivate Sub txtwrite(str As String)    SendMessage RichTextBox1.hwnd, EM_EXSETSEL, 0, txtlen
        RichTextBox1.SelText = str & vbNewLine
        txtlen = txtlen + LenB(str) + 2
        SendMessage RichTextBox1.hwnd, EM_EXSETSEL, 0, txtlen
        PostMessage RichTextBox1.hwnd, WM_KEYDOWN, VK_LEFT, 0
        PostMessage RichTextBox1.hwnd, WM_VSCROLL, SB_BOTTOM, 0
        
    End SubPrivate Sub WinsockAHP_DataArrival(ByVal bytesTotal As Long)
        
        Static strData, strSend As Byte
        
        WinsockAHP.GetData strData, vbString
        txtwrite (strData)
        
    End Sub参考自http://blog.sina.com.cn/s/blog_6379dd3b0100u32n.html现在我有另外一个问题:我接收到的数据字符有的应该在一行的却变成了两行,有办法解决吗?
      

  9.   

    不知道有多少前人掉在TCP Socket
    send(人多)send(病少)send(财富)
    recv(人多病)recv(少财富)
    陷阱里面啊!
    http://bbs.csdn.net/topics/380167545