题
我们得到一个错误中的维生素b6应用程序发送的数据来回通过TCP socket.我们得到一个运行错误"的字符串空间"。有没有人见过这样或具有任何思考为什么会发生这种事?这似乎是我们撞上的一些维生素b6的门槛,因此任何其他的思想将是有益的。
三个都, ak
解决方案
正如其他人已经指出的那样,每一个字符串串联在VB将分配一个新的字符,并再复制该数据,然后de分配原来,一旦可以。在一个循环,这可能导致的问题。
要解决这个你可以创建一个简单的StringBuilder类似这样的:
Option Explicit
Private data As String
Private allocLen As Long
Private currentPos As Long
Public Function Text() As String
Text = Left(data, currentPos)
End Function
Public Function Length() As Long
Length = currentPos
End Function
Public Sub Add(s As String)
Dim newLen As Long
newLen = Len(s)
If ((currentPos + newLen) > allocLen) Then
data = data & Space((currentPos + newLen))
allocLen = Len(data)
End If
Mid(data, currentPos + 1, newLen) = s
currentPos = currentPos + newLen
End Sub
Private Sub Class_Initialize()
data = Space(10240)
allocLen = Len(data)
currentPos = 1
End Sub
这类会尽量减少串拨款通过迫使串要建立与的空间,然后复盖的空间需要。它重新分配到大约两倍大小的时候,它发现,它没有足够的空间预先进行初始化。该文本的方法将返回的部分串的实际使用。
其他提示
文本上找到MSDN:
http://msdn.microsoft.com/en-us/library/aa264524(VS。60).aspx
Visual Basic应用程序 参考出的串空间(错误 14)
具体细节
Visual Basic允许使用非常 大串。但是, 要求其他方案和 方式操纵你的串可能 导致这一错误。这个错误的 以下原因和解决方案:
- 表达的需要临时串被创造了 评价可能导致这一错误。对于 例如,以下代码,导致一个 出串空间上的一些错误 操作系统:
MyString = "Hello"
For Count = 1 To 100
MyString = MyString & MyString
Next Count
Assign the string to a variable of another name. * Your system may have run out of memory, which prevented a string from
正在进行分配。
删除任何不必要的应用程序从记忆创建 更多的空间。
额外信息,选择 项目的问题,并按F1。
加Jacco的响应, vbAccelerator 有一大串生成器流,完成同样的事情,但有一点更加坚固。提交人还走过的解决方案,解释它是如何工作的。
假设你是附加的数据在一个循环,确保它不被附于本身,它会吃存极为迅速。
例和介绍错误的含义:http://msdn.microsoft.com/en-us/library/aa264524.aspx
某个时候在2009年春季,Microsoft不XP更新,干扰犰狳/硅领域包装。代码行被投掷的错误14,串空间是不合乎逻辑的。没有任何问题有一个超大的串。这是一个简单的任务,我甚至改为"foo"和错误14仍时有发生。我觉得错误是错误地映射在XP。答案为我们是消除copyMem-11犰狳保护项目和重新的exe。
这听起来就像你正中追加一个串通常。你可以尝试使用 StringBuilder类
此外,这可能是你有一些陈旧的对象包含串挂着,不被使用,并应被释放。检查圆引用,或许通过录象分配/释放在 Class_Initialize/Class_Finalize