Из строкового пространства в Visual Basic 6
Мы получаем ошибку в приложении VB6, которое отправляет данные туда и обратно через сокеты TCP. Мы получаем ошибку во время выполнения "out of string space". Кто-нибудь видел это или есть мысли о том, почему это произойдет? Кажется, что мы достигли порога VB6, поэтому любые другие мысли были бы полезны.
Ответы
Ответ 1
Как отмечали другие, каждая конкатенация строк в VB будет выделять новую строку, а затем копировать данные и затем де-распределять оригинал, как только это возможно. В цикле это может вызвать проблемы.
Чтобы обойти это, вы можете создать простой класс 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
Этот класс минимизирует количество распределений строк, заставляя строку быть построенной с пробелами в ней, а затем переписывая пробелы по мере необходимости. Он переназначает примерно вдвое больше его размера, когда обнаруживает, что он не имеет достаточного пространства, предварительно инициализированного. Метод Text вернет часть фактически используемой строки.
Ответ 2
Текст, найденный в 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.
Ответ 3
Добавление к ответу Jacco, vbAccelerator имеет класс String Builder, который выполняет почти то же самое, но немного более надежный. Автор также просматривает решение, объясняющее, как оно работает.
Ответ 4
Предполагая, что вы добавляете данные в цикле, убедитесь, что он не добавляется к себе, что очень быстро съедает память.
Пример и описание значения ошибки:
http://msdn.microsoft.com/en-us/library/aa264524.aspx
Ответ 5
Похоже, вы часто добавляете строку. Вы можете попробовать использовать класс StringBuilder
Кроме того, может быть, у вас есть некоторые устаревшие объекты, которые содержат строки, висящие вокруг, которые не используются и должны быть освобождены. Проверяйте циркулярные ссылки, возможно, регистрируя размещение/освобождение объектов в Class_Initialize/Class_Finalize
Ответ 6
Когда-то в spring 2009 года Microsoft сделала обновление XP, которое мешало оболочке Armadillo/Silicon Realms.
Строка кода, которая выбрасывала ошибку 14, Out of String, не была логичной. Не было проблем с строкой большего размера. Это простое задание, которое я даже изменил, чтобы быть "foo", и ошибка 14 все еще имела место. Я думаю, что ошибка неверно отображается в XP.
Ответ для нас заключался в том, чтобы удалить copyMem-11 из проекта защиты Armadillo и переустановить exe.