Нельзя ли побыстрее???

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

Нельзя ли побыстрее???

Сообщение newonline » 16.09.2005 (Пт) 19:25

Вот какая мулька. Здравствуйте всем. :lol:

Для хранения переменных и значений использую коллекцию. Ключ - имя, Item - значение.

Так вот количество Item около 15 тыс. При сохранении этой коллекции в файл (между сеансами работы) - это страшные тормоза.

Код: Выделить всё
Sub SaveVariables()
Dim i
Dim Key As String
Dim item
Dim TempString As String
i = 0

Set fso = New FileSystemObject
Set TxtStream = fso.OpenTextFile(VariableFilePatch, ForWriting, True)
    For Each item In KeyCollection
        i = i + 1
        Key = KeyCollection.item(i)
        TxtStream.WriteLine Key
        TxtStream.WriteLine VariableCollection.item(Key)
        DoEvents 'это из-за тормозов
    Next
TxtStream.Close
End Sub



Хотя, когда загружаю (создаю) эту коллукцию из файла - все происходит в одно мгновенье:

Код: Выделить всё
Sub LoadVariables()
Dim Key
Dim Value

Set fso = New FileSystemObject
Set TxtStream = fso.OpenTextFile(VariableFilePatch, ForReading, False)
    Do While Not TxtStream.AtEndOfStream
        Key = TxtStream.ReadLine
        Value = TxtStream.ReadLine
        KeyCollection.Add Key
        VariableCollection.Add Value, Key
    Loop
    TxtStream.Close
End Sub


Нельзя ли УБЫСТРИТЬ???
pls, forgive lamerzzzzzz :lol:
Последний раз редактировалось newonline 18.09.2005 (Вс) 19:33, всего редактировалось 1 раз.
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Re: Нельзя ли побыстрее???

Сообщение newonline » 17.09.2005 (Сб) 14:35

newonline писал(а):Нельзя ли УБЫСТРИТЬ???


"Как надо задавать вопросы" я учил.

Наверно некорректно спросил. Извиняюсь.
Я имею ввиду ускорить сохранение - а не Load, которое и так быстрое.

Что, опять MSDN? гугл? - "только в терновый куст не бросай"
:wink:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 17.09.2005 (Сб) 15:20

Чтобы что-то ускорить в сохранении, надо сначала полностью перепроектировать всю систему хранения данных. Ибо я даже не представляю, зачем надо было так извращаться, чтобы ключи коллекции хранить в отдельной коллекции. Извини, но в такую позу у меня мозги не встают...

Постановку задачи сделай - что выполняет эта часть, что от нее требуется. Тогда общими усилиями сможем улучшить.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 17.09.2005 (Сб) 15:53

Ennor писал(а): зачем ключи коллекции хранить в отдельной коллекции :shock:


Только лишь для того, чтобы сохранять ее в файл. Ведь сама коллекция (где Item - значение, а Key - имя переменной) - не дает доступа к своим ключам.... Вот заэтим и изголяююсь. Что можешь предложить лучше? :?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Shura
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 17.09.2005 (Сб) 13:25

Сообщение Shura » 17.09.2005 (Сб) 16:46

Я бы сохранял-читал массив пользовательских типов
Код: Выделить всё
Private Type Itm
   itmName As Variant
   itmValue As Variant
End Type
Dim ItmCollection() As Itm

Перед записью в файл заполняешь его элементами из коллекции
Код: Выделить всё
Dim i
ReDim ItmCollection(Coll.Count)
For Each i In Coll
ItmCollection(index).itmName = <имя>
ItmCollection(index).itmValue = <значение>
Next
и пишешь все разом в файл
Код: Выделить всё
  Open "c:\test.dat" For Binary As 1
  Put 1, , ItmCollection
  Close 1

Читать можно поэлементно или опять-таки одним махом весь массив. Это будет работать практически мгновенно, вот увидишь.
А может тебе вообще стоит не в коллекции внутри кода все это добро держать, а именно в таком хитром массиве? Тогда еще проще будет.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 17.09.2005 (Сб) 20:00

Талант не пропьешь
Бодидилдинг не спрячешь
Все гениальное - просто
MSDN - @ вражий

Просветил. Спасибо добрый человек.


А нельзя ли таким же нехитрым способом загнать колекцию.

Open "c:\test.dat" For Binary As 1
Put 1, , MyVariableCollection
Close 1

Я даже не подозревал, что на запись в файл можно передевать сразу весь массив.

Так почему же нельзя передать сразу всю коллекцию. Как бы здорово было. :D
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Shura
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 17.09.2005 (Сб) 13:25

Сообщение Shura » 17.09.2005 (Сб) 21:18

newonline писал(а):А нельзя ли таким же нехитрым способом загнать колекцию.

К сожалению, коллекцию нельзя, как, собственно, и любой другой объект. Все остальные типы переменных и пользовательских типов - можно. Тут VB на удивление толерантен: он при сохранении сам записывает в файлы кроме данных еще и типы переменных, поэтому при последующем чтении из такого файла проблем не возникает. Кстати, я там в примерном коде определил поля как Variant (я же не знаю, что там у тебя). Лучше изменить на те, что действительно у тебя использованы - сократишь и время и расход памяти, в том числе и дисковой.
А все-таки, так ли обязательно в твоем коде использовать именно коллекции? Коллекции большого размера - тот еще тормоз, массивы в любом случае будут быстрее работать.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 18.09.2005 (Вс) 2:33

Shura писал(а):... Коллекции большого размера - тот еще тормоз, массивы в любом случае будут быстрее работать.

Не в любом. Поиск значения по ключу - типичный пример. Не по индексу, прошу обратить внимание, а именно по строковому ключу. Кроме того, бич массивов - удаление элемента из середины, а коллекциям это дело пофиг - там удаление отовсюду с одинаковой скоростью производится.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 10:00

Спасибо за Support. :)

Вот еще мулька такая. я никак не могу понять: почему, если открыть, например, документ Word в блокноте - я вижу кракозябы ( квадратики и псевдографику и другие нечитабельные символы), а когда я сохраняю свои переменные в файл (Binary) - я могу его спокойно открыть в блокноте и весь текст вполне читабелен. Почто же так?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 18.09.2005 (Вс) 10:47

Символ в юникоде занимает 2 байта, а в ASCII - один.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 18.09.2005 (Вс) 15:24

Не только. Вордовские файлы гораздо сложнее по структуре. Поэтому они и непохожи на "простой текст".
Моду создают модоки, а распространяют модозвоны.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 16:19

hCORe,

наверняка в своих приложениях тебе прихродится оперировать большим числом занчений пременных и параметров. Как ты реализуешь эти задачи в своих приложениях. А то я уже сто раз перестраивал структуру хранения данных и все мне кажется, что эта очередная организация на рациональна. Потому как я уже всех задолбал на этом форуме тупымивопросами про хранение чтение запись и удаление переменных. А теперь еще возникла необходимость сохранения множества таблиц iGrid.

Сделай доброе дело - не посылай меня в MSDN или еще куда нить... - это не поможет. :roll:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 16:23

Кстати, так же не только Wordовские, но и MSAccess, Excel, - вообще любой нормальной проги, наверно - интересно это вообще хорошо или плохо, когда рабочие файлы программ можо прочитать в блокноте?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 18.09.2005 (Вс) 16:29

Итак...

Обыкновенно использую для записи/чтения:
- реестр (часто)
- текстовые файлы конфигурации (еще чаще, когда мало значений)
- двоичные файлы конфигурации (редко)

Что такое iGrid, в точности не знаю. Видимо, что-то ужасное :)

Тонны значений мои программы не записывают и не считывают. Но если бы реализовывал такую задачу, писал бы данные в двоичный или типизированный файл.
Моду создают модоки, а распространяют модозвоны.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 17:32

hCORe писал(а): писал бы данные в двоичный или типизированный файл.


А что ты скажешь по поводу чтения - записи во время сеанса работы - то есть куда ты читаешь переменные при запуске проги - или ты непосредственно считываешь параметры из файла (реестра)?

И еще iGrid - это обычная таблица (типа flexGrid) - только возможности шире. Как бы ты организовал сохранение данных из этой таблицы в файл?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 17:36

Ennor писал(а):зачем надо было так извращаться, чтобы ключи коллекции хранить в отдельной коллекции. Извини, но в такую позу у меня мозги не встают...


Так все-таки то, что коллекции не дают доступ к ключам - это не достойное оправдание (или вообще не оправдание) существования у меня в проге отдельной коллекции ключей? - если подойти с точки зрения конструктивной критики :?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 18.09.2005 (Вс) 17:51

я бы еще немного поэкспериментировал с твоим кодом:

Код: Выделить всё
Sub SaveVariables()
Dim Key As String
Dim item 'сдесь было бы неполохо типизовать свою переменную класса
Dim TempString As String


Set fso = New FileSystemObject
Set TxtStream = fso.OpenTextFile(VariableFilePatch, ForWriting, True)
with TxtStream
with VariableCollection
For Each item In KeyCollection
   Key = item.Value 'вместо Value укажи свое свойство которое у тебя по-молчанию для этой коллекции
   .WriteLine Key
   .WriteLine .item(Key)
   DoEvents 'это из-за тормозов
Next
end with
.Close
end with

End Sub

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 18.09.2005 (Вс) 18:11

Во время работы непосредственно читаю данные из реестра, файла, плюс хранилища уже загруженных значений (обыкновенно, коллекция или массив. Чаще - массив).

По поводу iGrid: использовал бы CSV, если данных мало, и бинарник с пользовательскими типами/файл произвольного доступа, если данных много. Файл произвольного доступа (Random Access File) лучше - он позволяет сразу же получить данные любой записи, не "пробегаясь" по предыдущим.
Моду создают модоки, а распространяют модозвоны.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 18:27

hCORe писал(а): бинарник с пользовательскими типами/файл произвольного доступа, если данных много. Файл произвольного доступа (Random Access File) лучше - он позволяет сразу же получить данные любой записи, не "пробегаясь" по предыдущим.


Спасибо тебе, большой человек. Если можно - последний (или предпоследний вопрос) (на сегодня) - и я перестану тебе докучать - пойду и съем пирожок вон там.

Вообщем с файлом для хранения понятно. Непонятно как организуешь передачу данных из таблицы в этот бинарник. Неужели перебор всех строк по каждой колонке (строк до 15 тыс, колонок до 8 - 10).
Это немало, кажись. Лучше кусочек кода - это понятнее необазованному типу. :lol:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 18.09.2005 (Вс) 18:30

Да, каждую строчку обрабатывать - это ужас. Но это первое, что приходит в голову.

Второй приходит идея: "может, воспользоваться базой данных?" ADO/DAO довольно быстро работают, а у грида, я думаю, всяко есть RecordSet или DataSource, или и то, и другое.
Моду создают модоки, а распространяют модозвоны.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 18:31

Konst_One,

спасибо, добрый человек.
Это прямо таки векторная рационализация. На таки VB держится :wink:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 19:29

я бы еще немного поэкспериментировал с твоим кодом:

:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
Вот это скоростуха - ты гений. В АКАДМИЮ. Срочно. Молодец. Никаких DoEvents.:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 19:32

12654*5 = 63270 переменных и значений сохранено менее, чем за 4 сек. Это на Celeron-800!!!.
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 18.09.2005 (Вс) 20:33

а у грида, я думаю, всяко есть RecordSet или DataSource, или и то, и другое.


Отсутствует напрочь - @ такая. Как тут можно бы решить эту задачку? :?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

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

Сообщение Andrey Fedorov » 19.09.2005 (Пн) 8:06

newonline писал(а):
а у грида, я думаю, всяко есть RecordSet или DataSource, или и то, и другое.


Отсутствует напрочь - @ такая. Как тут можно бы решить эту задачку? :?


Ну и нафига такой Grid - чтобы с ним мучиться? Если дюже мозахизмом хочется заниматься то родных Grid-ов от MS идущих в поставке с VB вполне достаточно. А если нормально работать, то надо сразу выбирать Grid с нормальными возможностями.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 19.09.2005 (Пн) 8:37

Последний раз редактировалось Al Khamid 02.12.2007 (Вс) 12:04, всего редактировалось 1 раз.

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

Сообщение Andrey Fedorov » 19.09.2005 (Пн) 8:42

Al Khamid писал(а):С Андреем про гриды лучше не спорь. Все равно он впарит "ЯНУС" и будет прав.


Эх, если бы мне еще проценты отчисляли за впаривание GridEx и ActiveReports то Канары были бы уже моими - всех пригласил бы в гости...

:lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Сообщение alibek » 19.09.2005 (Пн) 9:06

(провоцирую) А QuantumXpressGrid лучше :)
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Andrey Fedorov » 19.09.2005 (Пн) 9:30

alibek писал(а):(провоцирую) А QuantumXpressGrid лучше :)


Не получится спровоцировать - и среди лучших Grid-ов есть свои достоинства/недостатки. Идеала нет ни у кого.

В общем лично для меня оптимальным (удобство разработки/навороты) оказался Janus. Хотя Quantum Xpress Grid тоже на очень хорошем уровне - если бы не было Janus-a, то, скорей всего, выбрал бы его.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 19.09.2005 (Пн) 10:14

а мне vsFlexGrid'a хватает...

След.

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

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

Сейчас этот форум просматривают: AhrefsBot, PetalBot и гости: 5

    TopList