Вошкин
|
|
Tue Sep 23 20:40:51 2003 |
Помогите, Бога ради! Пытаюсь программировать в Visual Basic 6 и столкнулся с неразрешимой проблемой. При открытии файла большого объема (да и любых других данных)... В общем при добавлении данных к переменной типа string процесс идет все медленнее... То есть пока сама переменная имеет объем до (примерно) 100Кб все хорошо, а дальше процесс добавления данных такой медленный, что даже мне ждать надоедает. Скажите, VB всегда такой медленный? |
Dim
|
| Thu Sep 25 10:59:52 2003 |
Re: Помогите!!! Программы на VB обычно получаются гораздо более быстрыми чем на других языках (даже C++), но требуются определенные хитрости. В описанном тобой примере происходит замедление из-за того, что у длинной переменной трудно найти конец. Решается проблемма просто созданием кэша. То есть вместо строки: Str=Str & AddData, нужно сделать примерно следующее: ch=0 ... Cash(ch)=Cash(ch) & AddData if len(Cash(ch))>10000 then if ch<255 then ch=ch+1 End if ... for i=0 to ch Str=Str & Cash(i) next i Этот фрагмент делает тоже, что и простая строка, только в 255 раз быстрее (если длина данных превышает 2550000).
|
|
Вошкин
|
| Mon Sep 29 18:14:22 2003 |
Re: Помогите!!! Действительно сработало! А может еще знаете как работает в VB функция split? А то как-бы я не пытался засунуть туда массив, все-равно выдается ошибка.
|
|
Dim
|
| Wed Oct 1 16:50:08 2003 |
Re: Помогите!!! Split работает не с массивами, а с переменными типа Variant. Проблемма лишь в том, как узнать длину полученного массива, поскольку обращение к несуществующему элементу вызовет ошибку. Ниже привожу пример программы с использованием split и вычислением длины полученного массива. Кстати обратная функция - Join так же использует в качестве массива аморфную переменную. Private Sub PrimSplit () Dim arrs as Variant, str as String, Ln as Long str="Вася гулял по городу" arrs=Split(str," ") 'разделяем строку в arrs по пробелам Ln=LenArray(arrs) 'получаем 4 str=arrs(1) 'получаем "гулял" End Sub Public Function LenArray (Dims as Variant) as Long 'Функция определения длины (последнего элемента) массива on error goto err dim i as Long, Fk as Variant For i=0 to 2000000000 Fk=Dims(i) next i LenArray=2000000000 Exit Function err: LenArray=i-1 'обращение к несуществующему элементу приведет сюда End Function Думаю на этом примере все понятно.
|
|