Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Перенос БД в память


Автор: scull 22.2.2007, 14:15
Имеется таблица в Excell (700x8), в проге работа с ней ведется командами типа: 

Код

A = wbookclient.activesheet.cells(r,c)


Создаю массив (700x8) и всю таблицу переношу в этот массив, т.е. команда меняется так:

Код


Dim Mass(700x8) as Var

For x = 1 to 700
     For y = 1 to 8 
          mass(x,y) = wbookclient.activesheet.cells(x,y)
     Next
Next

A = Mass(r,c)


Вопрос такой: Сильно ли  повысит эта операция скорость записи/чтения и проверки условий данных?

P.S.
Грузится программа будет долго, но меня это не беспокоит.
По окончании работы с программой, массив пишется обратно в файл.




 

Автор: mihanik 22.2.2007, 16:06
Планируешь работать с переменными типа Var.

Хм...
Очень медленно работает с подобными переменными бейсик...
Да и памяти будет жрать подобный массив порядочно.
А вдруг будет своп на диск... Хотя... Вряд ли.


По-моему изгалятся не имеет смысла.

Автор: Black_Star 22.2.2007, 18:27
А по-моему стоит. Всякие операции, которые выполняются с памятью на порядок выше, чем считывать/записывать на веник.
То, что жрать будет память.... 700*8*8*50 (если длина записи 50 и тип Variant) = 224000=2 Мб. И это по сравнению со всей оперативкой? Мелочь...
А вот что медленно вары обрабатываются это 100% точно.

Автор: Akina 23.2.2007, 00:54
На самом деле файл Эксельный будет закэшен, так что нечто вроде
Код
Set mySheet = wbookclient.activesheet
...
With MySheet
   A = .Cells(x,y)
...
End With
...
вряд ли будет много медленнее.

Автор: scull 26.2.2007, 14:43
На счет Var согласен - может быть тогда перед заносом в память определять тип переменной и в соответствующую ячейку массива, настроенный под этот тип данных - Должно работать быстрее?

2 Akina

Пробовал такой подход, вот только запросов на эти данные достаточно много, да и надо все время следить за With, а когда файлов открывается три а не один, начинается полный абзац.

Автор: Akina 26.2.2007, 18:45
Цитата(scull @  26.2.2007,  15:43 Найти цитируемый пост)
запросов на эти данные достаточно много

Цитата(scull @  26.2.2007,  15:43 Найти цитируемый пост)
файлов открывается три а не один

В таком случае я бы пошел по пути открытия файлов как ODBC-источников данных... фактически то же "копирование в память с кэшированием", но неиспользуемые блоки считываться не будут.

Впрочем, так и осталось неясным - в столбцах таблиц находятся разнородные данные или они структурированы? иными словами, оправдано ли использование Variant?

Автор: scull 27.2.2007, 15:05
2 Akina

Понял, что  не оправданы... избавился от Var

Всем спасибо за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)