Форум / Программы / Тема

+ Список Разделы Темы Новая тема Ответить Ответ админа Удалить Открыть/Закрыть Чат Барахолка Каталог
Реклама

Помогите!!!

Статистика темы

Всего ответов в теме: 3
Просмотров темы: 2488

Вошкин
  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
Думаю на этом примере все понятно.
Реклама
Карта сайта Created by Isety corp. (2005), Version: 1.0.2, Revision: 19.01.2007