我们得到一个错误中的维生素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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top