Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка: Out Of Memory 
V
    Опции темы
ProgramerForever
  Дата 20.6.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: 2
Всего: 5



В проекте есть функция, рассчёт которой 100% занимает огромное время. Решил затабулировать (раз вычислить, а потом обращаться к массиву готовых значений). Вот так:
Код

Private Sub Form_Load()
    Dim t1, t2, diff As Date
    Dim x1, x2, y1, y2, z1, z2 As Byte
    Dim rad(32, 32, 32, 32, 32, 32) As Double
    t1 = Now
    
    For x1 = 1 To 32
        For y1 = 1 To 32
            For z1 = 1 To 32
                For x2 = 1 To 32
                    For y2 = 1 To 32
                        For z2 = 1 To 32
                            rad(x1, y1, z1, x2, y2, z2) = Sqr((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (z2 - z1) * (z2 - z1))
                        Next
                    Next
                Next
            Next
        Next
    Next
    t2 = Now
    diff = DateDiff("s", t1, t2)
    MsgBox "табулирование произошло за " + diff + " секунд", vbInformation
End Sub

При компиляции возникает ошибка "Out of memory". Как изменить код, чтобы он работал?

Это сообщение отредактировал(а) ProgramerForever - 20.6.2009, 00:35
PM MAIL WWW ICQ   Вверх
Naghual
Дата 20.6.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Не использовать столь многомерный массив!
Произвести рассчет с сохранением данных в файл и впоследствии читать из него.



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
ProgramerForever
  Дата 20.6.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: 2
Всего: 5



А стоит ли игра свеч? Не проще ли будет вычислять наше первоначальное
Код

rad = Sqr((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (z2 - z1) * (z2 - z1))

Чем вычислять смещение в файле, чтение из самого файла, а потом ещё и преобразование в число?

Это сообщение отредактировал(а) ProgramerForever - 20.6.2009, 00:33
PM MAIL WWW ICQ   Вверх
neic
Дата 20.6.2009, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



ProgramerForever, не проще.
PM MAIL WWW ICQ Skype   Вверх
ProgramerForever
Дата 20.6.2009, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: 2
Всего: 5



Хмм.. Понятно. Как теперь организовать максимальную скорость чтения из файла?
Насколько я понимаю, данные должны лежать сплошным потоком, но каждая ячейка фиксированого размера. Как получить строчку фиксированного размера?
PM MAIL WWW ICQ   Вверх
ProgramerForever
Дата 20.6.2009, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: 2
Всего: 5



Что-то я подумал, посчитал.. При таком размере (32^6) массива каждый байт в поле записи выливается в гигабайт на диске. Так что не очень выгодно. Да и читать файл в несколько гиг в цикле - это медленно. ИМХО, конечно.
PM MAIL WWW ICQ   Вверх
neic
Дата 20.6.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Попробуй СУБД какую-нить использовать

Добавлено через 2 минуты и 57 секунд
И вообще лучше по определённому запросу делать вычисления, да будет подтромаживать во время вычисления, зато ты лишишься гемора с хранением.

Но даже БД будет весить много, конечно по быстрее чем с файлом работать. Опять же гемор с БД.
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 20.6.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(ProgramerForever @  20.6.2009,  03:33 Найти цитируемый пост)
При таком размере (32^6) массива каждый байт в поле записи выливается в гигабайт на диске. Так что не очень выгодно. Да и читать файл в несколько гиг в цикле - это медленно. 

Ну кто-то вообще хотел это в память затолкать, помнится.

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ProgramerForever
  Дата 21.6.2009, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: 2
Всего: 5



Это функция для рассчёта длины вектора по 6ти координатам. Тут квадраты, корень квадратный есть. По-моему, это медленно. Вот я и подумал замутить табличку. Обращение к готовому массиву будет идти быстрее, чем вычисление. Но не  данном случае  smile Было бы переменных поменьше, тогда.. Тему закрываю, спасибо за обсуждение.
 smile 
А всё-таки, какой максимальный размер массива?

Это сообщение отредактировал(а) ProgramerForever - 21.6.2009, 07:25
PM MAIL WWW ICQ   Вверх
Akina
Дата 21.6.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(ProgramerForever @  21.6.2009,  08:24 Найти цитируемый пост)
А всё-таки, какой максимальный размер массива?

не более 32 измерений, кажется... во всяком случае 24 измерения точно допустимы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ProgramerForever
Дата 21.6.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: 2
Всего: 5



Цитата

32 измерений

Это размерность массива?
Код

Dim ar(n1,n2,n3,n4...,n32)
'Где n1..n32 - целое

Так?
А по размеру? В байтах.

Это сообщение отредактировал(а) ProgramerForever - 21.6.2009, 12:17
PM MAIL WWW ICQ   Вверх
Naghual
Дата 21.6.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Цитата(ProgramerForever @  21.6.2009,  12:16 Найти цитируемый пост)
А по размеру? В байтах.

Отталкиваясь от первоначального поста, предположу что он ограничем количеством свободной оперативной памяти.  smile 


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Akina
Дата 23.6.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Нет, количеством доступной приложению виртуальной памяти, т.е. около 2 Гб.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.