![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
ZeroDivide |
|
|||
Unregistered |
Я написал модуль, загружающий файл в TMemoryStream (надо для игрового движка).
Файл загружаю функцией LoadStream. На маленьких файлах работает отлично, но с большими (вроде более 800 килобайт) возникает исключение: "Stream read error. Out of memory while expanding memory stream". Перепробовал кучу способов (Read/Write, через файлы, через хендлы), ничего не изменилось. ![]() Как исправить? Заранее спасибо за ответы. |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
перед FStream.CopyFrom нужно позицию Loader-а в 0 поставить...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Guest |
|
|||
Unregistered |
Это я просто криво код скопировал
![]() Изменений нет. Всё тот же "Stream read error. Out of memory while expanding memory stream". Памяти у меня 1024 МБ + файл подкачки. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
По всей видимости, памяти у тебя маловато...
Может забываешь где-нибудь освобождать память ?... У себя сейчас проверил - ошибка вылазит, если кончается вся виртуальная память (у меня 512RAM + 1GB Swap)... Также даже если у тебя виртуальная память больше 2ГБ - проку мало, т.к. в NT-системах для пользовательских процессов доступна только половина адресного пространства, т.е. 2 Гб... (про Win9x - не знаю...) -------------------- С уважением, г-н Посол. |
|||
|
||||
Guest |
|
|||
Unregistered |
У меня Windows XP.
Быть того не может, чтобы памяти не хватило... А другого способа нет? |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
p0s0l, к чему размер памяти? Ты ж посмотри, что там в коде написано
![]()
Для начала прочитай про многопоточность, может вопрос у тебя решится сам собой. Но если вопрос очень нужен, то тебе придётся сделать всё хотя бы по такому сценарию: 1) Создаём поток Thread := TZDLoader.Create(true); 2) присваиваем свойства 3) запускаем поток Thread.Resume; (Thread.free вызывать не нужно!) 4) из потока при завершении операции чтения вызываем функцию основного приложения для того чтобы передать указатель на поток с прочитанными данными (используй Synchronize) -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Мдя... Тестил я на простом TMemoryStream.SetSize... На LoadStream не посмотрел
![]() ![]() -------------------- С уважением, г-н Посол. |
|||
|
||||
Guest |
|
|||
Unregistered |
А по-моему ничего смешного
![]() Я впервые работаю с TThread`ами. А вот про Synchronize я почти ничего не понимаю, я знаю, что его используют для синхронизации данных между двумя потоками. Можете обеспечить ламера ![]() ![]() |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
ZeroDivide, почитай о потоках в в этой статье, всё расжевано.
http://forum.vingrad.ru/index.php?showtopic=60076&view=all Потратишь время на чтение, но сэкономишь его на отлове багов... PS: Можно уже и зарегистрироваться ![]() ![]() -------------------- С уважением, г-н Посол. |
|||
|
||||
ZeroDivide |
|
|||
Unregistered |
p0s0l, я уже скачал, буду читать. Ты не думай, что я ламер
![]() И всё таки ты можешь переписать мой модуль? Ведь про потоки читать-то много... ![]() |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
ZeroDivide, сделай так как написал Illusion Dolphin:
-------------------- С уважением, г-н Посол. |
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Я бы сделал так:
P.S. запоздал ))) уже запостили почти тот же вариант Это сообщение отредактировал(а) Illusion Dolphin - 13.8.2005, 21:42 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
ZeroDivide |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 14.8.2005 Репутация: нет Всего: 1 |
Я зарегистрировался
![]() ![]() Спасибо все отвечавшим! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |