请问大家帮忙看看我的代码?为什么接收数据会越来越慢,我是先发送一条命令给我的服务器,然后服务器会返回一些告警信息,大概有几万行的信息。
接收代码如下:
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
接收代码如下:
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
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
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声明的静态变量啦
RichTextBox1.Text = RichTextBox1.Text & strData当“文本”内容很多时,后面的那个“字符串运算”耗时会增加(次要因素),对“对象赋值”也会消耗大量时间。
而楼主的操作会“频繁刷新内容”,必然会显得越来越慢了。也许用qinguangjun123在4楼说的方法,能有所改善。
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现在我有另外一个问题:我接收到的数据字符有的应该在一行的却变成了两行,有办法解决吗?
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545