Подскажите как сделать быстрее!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Подскажите как сделать быстрее!

Сообщение SerJay » 04.07.2005 (Пн) 7:55

Ребята у меня такая проблема:
У меня загружаются данные из 3 файлов .txt
в 3 ячейки msflexgrid.
Всего ROW 22000

Загружается Таким образом:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ms = FreeFile
Open "c:\1.txt" For Input As #ms
V = 0


Do Until EOF(ms)
Line Input #ms, no
V = V + 1
alltxt = alltxt + no + vbCrLf
rez1.Row = V
rez1.Col = 0
rez1.Text = no
Loop
Close #ms
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Open "c:\2.txt" For Input As #ms
V = 0


Do Until EOF(ms)
Line Input #ms, no
V = V + 1
alltxt = alltxt + no + vbCrLf
rez1.Row = V
rez1.Col = 1
rez1.Text = no
Loop
Close #ms
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Open "c:\3.txt" For Input As #ms
V = 0


Do Until EOF(ms)
Line Input #ms, no
V = V + 1
alltxt = alltxt + no + vbCrLf
rez1.Row = V
rez1.Col = 5
rez1.Text = no
Loop
Close #ms
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
И Грузится всё это дело на P3 - 340!!! секунд
И это только 10000 строк.
Я понимаю это изврат из .txt грузить такой обьём,
но я только начинающий и ещё не изучил Базы данных и
SQL запросы.Да и проект уже готов.
Можно ли сделать чтоб загружалось быстрее.
Благодарен за любые мысли.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.07.2005 (Пн) 8:18

Код: Выделить всё
dim f as integer, alltext as string
dim i as long, j as long, p as long, pp as long

for i=1 to 3
  f=freefile
  open "c:\" &cstr(i) & ".txt" for input access read as #f
  pp=len(alltext)+1
  alltext=alltext & input$(lof(f), f)
  close #f
  j=0
  do
    p=instr(pp,alltext,vbnewline)
    j=j+1
    rez1.row=j
    rez1.col=choose(i,0,1,5)
    if p=0 then
      rez1.text=mid$(alltext,pp)
      exit do
    else
      rez1.text=mid$(alltext,pp,p-pp)
      pp=p+len(vbnewline)
    end if
  loop
next


Не проверял :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Подскажите как сделать быстрее!

Сообщение SerJay » 04.07.2005 (Пн) 8:47

GSerg я сейчас на работе,вечером проверю,но
заранее спасиб.

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Подскажите как сделать быстрее!

Сообщение SerJay » 04.07.2005 (Пн) 10:06

GSerg сейчас попробывал-
твой пример грузит за 70 секунд.Уже что-то.Лучше чем 340.Сенкс.
Вот думаю прогресс бар вставить для наглядности,
чтоб не подумали что комп висит

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Подскажите как сделать быстрее!

Сообщение Andrey Fedorov » 04.07.2005 (Пн) 11:08

SerJay писал(а):Вот думаю прогресс бар вставить для наглядности,
чтоб не подумали что комп висит


Еще лучше - не использовать для этой цели нагружаемых контролов.
Взять нормальный Grid который способен выводить из массива или Recordset-a. Тогда все будет работать практически моментально, тем более с таким мизерным файликом.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 05.07.2005 (Вт) 10:35

Мне кажется, основные тормоза сидят в VB-шных функциях чтения из файлов. Наверно функции Win32 будут читать быстрее... :roll: а то и намного быстее!.. :wink:
Invalid user or password...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.07.2005 (Вт) 10:46

Arcanoid писал(а):Мне кажется, основные тормоза сидят в VB-шных функциях чтения из файлов. Наверно функции Win32 будут читать быстрее... :roll: а то и намного быстее!.. :wink:


Миф. Основные тормоза как всегда в шаловливых ручках юзера.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 05.07.2005 (Вт) 11:40

Стоит ли у msflexgrid перед загрузкой visible=false? Если нет, то жел. поставить в начале visible=false, в конце загрузки visible=true. Если скорость все же ниже чем хотелось бы, тогда попробуй закомментировать строки, где у тебя добавляются данные в данный контрол, засеки время... Дальше все зависит от времени отработки в первом и втором случае... Гуру прошу меня не закидывать помидорами за ответ, я бы начал решать проблему с этого...
Бороться и искать, найти и перепрятать!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.07.2005 (Вт) 11:54

MeMBus писал(а):Стоит ли у msflexgrid перед загрузкой visible=false? Если нет, то жел. поставить в начале visible=false, в конце загрузки visible=true.


Может помочь, но не сильно ибо данный Grid по своей природе нагружаемый, на что уходит время.

Я бы рекомендовал поискать Grid который может нормально работать с массивами. Я пользую Janus GridEx, но есть и другие, в том числе и бесплатные.

Кроме нагружаемого Grid-a тормоз в твоем случае дает строчка

Код: Выделить всё
alltxt = alltxt + no + vbCrLf


Ну нельзя так добавлять в цикле - об этом уже неоднократно писалось.

Ну а примерчик как считать в массив приложен (у меня 3 файла по 50000 строк читаются ~1.3 секунды). Остальное уже зависит от Grid-a.
Вложения
TestS.rar
(2.35 Кб) Скачиваний: 44
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Подскажите как сделать быстрее

Сообщение SerJay » 06.07.2005 (Ср) 12:05

Andrey Fedorov я скачал Janus GridEX,но разобраться не могу.
Не могли бы вы дать исходник загрузки .txt файлов.
Буду Огромно благодарен!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Подскажите как сделать быстрее

Сообщение Andrey Fedorov » 06.07.2005 (Ср) 12:43

SerJay писал(а):Andrey Fedorov я скачал Janus GridEX,но разобраться не могу.
Не могли бы вы дать исходник загрузки .txt файлов.
Буду Огромно благодарен!


Да элементарно. Держи пример.
Вложения
TestS.rar
(4.56 Кб) Скачиваний: 36
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Подскажите как сделать быстрее

Сообщение SerJay » 06.07.2005 (Ср) 14:32

Andrey Fedorov огромное спасибо за пример!
И последние 2 вопроса: как мне сделать чтоб таблица
загружалась только при нажатии кнопки, а не сразу(я скопировал
всё из form_Load в Command1_Click но вылезла ошибка)?
И второй вопрос:Я установил Janus Grid при установки ввёл
серийный номер- я могу теперь использовать в своих проектах
файл GRIDEX20.OCX не будел ли он требовать регистрации
и т.п. на других машинах.
Прошу прощенья за такие ламерские вопросы,я недавно начал
изучать VB.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Подскажите как сделать быстрее

Сообщение Andrey Fedorov » 06.07.2005 (Ср) 14:46

SerJay писал(а):И последние 2 вопроса: как мне сделать чтоб таблица
загружалась только при нажатии кнопки, а не сразу(я скопировал
всё из form_Load в Command1_Click но вылезла ошибка)?


Ну ты уж читай что за ошибка и от того танцуй.
Пример с кнопкой Fill приложен.

SerJay писал(а):И второй вопрос:Я установил Janus Grid при установки ввёл серийный номер- я могу теперь использовать в своих проектах
файл GRIDEX20.OCX не будел ли он требовать регистрации
и т.п. на других машинах.


Dll-как должна быть зарегистрирована как и все ActiveX компоненты.
Т.е все как обычно. Лицензионный компонент (для которого вводится серийник) должен быть только на твоей машине...

Кстати, если в программе используется Help то в дистрибутив юзерам лучше включать ocx из файла C:\Program Files\Janus Systems Components\Janus GridEX 2000\OCXs Files\Cab files\GridEX20.CAB, иначе он не будет правильно реагировать на F1.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Сообщение SerJay » 06.07.2005 (Ср) 16:04

Андрей я не понял, допустим я хочу распространять свою прогу,
какой файл я должен включать в дистрибутив?
GRIDEX20.OCX этого файла будет достаточно?
Всмысле то что я ввёл серийник при установки Janus
этого достаточно чтобы файл GRIDEX20.OCX стал свободно
распростроняемым?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.07.2005 (Ср) 16:07

SerJay писал(а):Андрей я не понял, допустим я хочу распространять свою прогу,
какой файл я должен включать в дистрибутив?
GRIDEX20.OCX этого файла будет достаточно?


Да.

SerJay писал(а):Всмысле то что я ввёл серийник при установки Janus
этого достаточно чтобы файл GRIDEX20.OCX стал свободно
распростроняемым?


У практически любого контрола серийник влияет только на его поведение в среде разработки (на твоей машине).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Сообщение SerJay » 06.07.2005 (Ср) 16:18

Значит я не могу этот файл GRIDEX20.OCX включать в свой дистрибутив и распространять?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.07.2005 (Ср) 16:20

SerJay писал(а):Значит я не могу этот файл GRIDEX20.OCX включать в свой дистрибутив и распространять?


Да можешь, можешь, если не учитывать лицензионное соглашение.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Сообщение SerJay » 06.07.2005 (Ср) 16:23

Успокоил!!!
Всем большое спасибо за участие,
Отдельное спасибо Андрею

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

Сообщение HiMik2003 » 06.07.2005 (Ср) 19:01

а ващета, больше 100 строк грузить юзеру в глаза - помоему плохой тон в программировании. Ну что он(юзверь) с этим количеством строк будет делать!!Я идиот! Убейте меня, кто-нибудь!
:D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.07.2005 (Чт) 8:59

HiMik2003 писал(а):а ващета, больше 100 строк грузить юзеру в глаза - помоему плохой тон в программировании. Ну что он(юзверь) с этим количеством строк будет делать!!Я идиот! Убейте меня, кто-нибудь!
:D

Иногда так бывает нужно.
Excel грузит сразу все строки файла.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 07.07.2005 (Чт) 15:03

HiMik2003 писал(а):а ващета, больше 100 строк грузить юзеру в глаза - помоему плохой тон в программировании. Ну что он(юзверь) с этим количеством строк будет делать!!Я идиот! Убейте меня, кто-нибудь!
:D


Прокрутит и найдет нужный. Достаточно удобно когда кол-во строк тысяч так до 5..10 и имеется возможность сортировки кликом на заголовок столбца. Но запросы возвращающие большое кол-во строк подгружают сетку, так что это надо учитывать. В общем, нужно выбирать золотую середину и по возможности ограничивать пользователя иногда заставляя его перед выдачей данных установить фильтр (например выбрать раздел справочника).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 07.07.2005 (Чт) 16:25

Можно было бы еще в MSFlexGrid вместо свойства text, для которого нужно менять положение курсора, использовать свойство textmatrix(row,col)="My text"

Правда не знаю, на сколько быстрее будет работать код при таком количестве строк.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Сообщение SerJay » 08.07.2005 (Пт) 7:54

Andrey Fedorov снова к вам вопрос :
Не смог я разобраться с вашим кодом <TestS>
Не могли вы бы помочь надо чтоб при загрузке Grid показывался,
При нажатии на кнопку-1 грузились данные из .txt
(создавать их не надо),а при нажатии на кнопка-2 Grid очищался.
Заранее благодарен

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.07.2005 (Пт) 8:38

SerJay писал(а):Andrey Fedorov снова к вам вопрос :
Не смог я разобраться с вашим кодом <TestS>
Не могли вы бы помочь надо чтоб при загрузке Grid показывался,
При нажатии на кнопку-1 грузились данные из .txt


Они там и так грузятся при нажатии на кнопку.

SerJay писал(а):а при нажатии на кнопка-2 Grid очищался.


Создай соответствующую кнопку и вставь в нее следующий код:

Код: Выделить всё
Grid.ItemCount = 0
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Сообщение SerJay » 08.07.2005 (Пт) 10:18

Андрей нет он грузится сразу.У вас Там только одна кнопка Close

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.07.2005 (Пт) 10:20

SerJay писал(а):Андрей нет он грузится сразу.У вас Там только одна кнопка Close


Ну держи еще раз.
Вложения
TestS.rar
(4.67 Кб) Скачиваний: 37
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SerJay
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 06.05.2005 (Пт) 17:12
Откуда: Казахстан

Сообщение SerJay » 08.07.2005 (Пт) 10:45

Андрей Спасибо ещё раз!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList  
cron