|
07.04.2011, 19:02
|
#1
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Проблемка с памятью
есть класс
type TPro
field COUNT_FRAMES:int
field IMAGE:TImage
end type
type Ololo extends TObject
field PRO:TPro
field X,Y:int
field CurrentFrame:int
method Draw()
DrawImage PRO.IMAGE,X,Y,CurrentFrame
end method
end type
Когда вызывается метод Draw() типа Ololo, прога начинает жрать память , от 58 до 400 мб.
оказалось, что память жрет строчка
DrawImage PRO.IMAGE,x,y,CurrentFrame
|
(Offline)
|
|
07.04.2011, 19:28
|
#2
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблемка с памятью
Код создания объектов в студию!
__________________
|
(Offline)
|
|
07.04.2011, 23:10
|
#3
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблемка с памятью
Охх... Крорче:
Type TTreePro
Global LIST:TList=CreateList()
Field IMAGE:TImage
Field SPEED:Int
Field COUNT_F:Int
Field ID:Int
Function GetRandom:TTreePro()
R=Rand(1,CountList(LIST))
For T:TTreePro=EachIn LIST
C:+1
If(C=R) Return T
Next
End Function
End Type
Весьма бреадовшный код прототипов деревьев. Парсер читает файл, вычиывает из него параметры дерева, а потом идет сама картинка в формате PNG, просто дописанная по байтам в конец файла. Вот на ее начало я смещаю указатель в файле, и передаю в функцию LoadAnimImage в кач-ве пути (path:Object)
Картинка грузится верно.
Вот код деревьев:
Type TTree Extends TObject
Field PRO:TTreePro 'Вот наш линк на прототип
Field Timer:Int
Field CurrentFrame:Int=0
Function Create(X#,Y#,Pro:TTreePro)
If(PRO=Null) Return
T:TTree=New TTree
T.X=X
T.Y=Y
T.NEED_INDEXED=0 'нам не нужна индексация в секторах!
T.RENDER_SIZE=Max(PRO.IMAGE.Width,PRO.IMAGE.Height)
T.PRO=PRO
ListAddLast FULL_LIST,T
End Function
Method Math()
timer:+1
If(Timer>PRO.Speed)
Timer=0
CurrentFrame:+1
If(CurrentFrame=PRO.COUNT_F) CurrentFrame=0
EndIf
End Method
Method Draw()
DrawImage PRO.IMAGE,X,Y,CurrentFrame
End Method
Method Destroy()
End Method
End Type
|
(Offline)
|
|
07.04.2011, 23:57
|
#4
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблемка с памятью
Вот те совет избегай называть параметры так же как члены класса. Экранирование локальными переменными может здорово попортить кровь.
В предоставленном коде вроде бы как всё норм.
А с чего ты решил что память жрёт, т.е. оно же должно если память течёт хавать постоянно... если же однократное увеличение то это просто аллокейшн включая память на будущее.
__________________
|
(Offline)
|
|
08.04.2011, 00:24
|
#5
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблемка с памятью
Ну..Ты знаешь, скачок с 58 мегов до полгига оперативы за рисование одной картинки, это слишком... Тем более глюкает при этом неслабо. Где то все же происходит утечка, блин
|
(Offline)
|
|
08.04.2011, 09:37
|
#6
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблемка с памятью
Забыл совсем сказать. Картинки дерева - анимированные. 100 кадров О_о. размером [300х300 px примерно.
В PNG оно занимает 5 метров диска. А в оперативе, когда развернется, и того наверно больше. Но ведь он ее предварительно загрузил, какого фига он начинает отжирать память при рисовании то????
|
(Offline)
|
|
08.04.2011, 11:07
|
#7
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблемка с памятью
ну тогда ты попал, 300х300 в памяти станет 512*512, 512*512*100*4 = 100 мегов как минимум.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.04.2011, 11:15
|
#8
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблемка с памятью
ТОгда не будет деревьев анимированных в игре
|
(Offline)
|
|
08.04.2011, 11:34
|
#9
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблемка с памятью
может чуть меньше фреймов? или в требованиях указать 2гб RAM минимум
__________________
|
(Offline)
|
|
08.04.2011, 11:49
|
#10
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблемка с памятью
2 ГБ RAM для 4-х видов деревьев? Не, лучше уж тогда сделать их статическими. Хотя движок поддерживает любое кол-во фреймов...
Надо попробовать кадров 10 сделать. И картинку пожать.
|
(Offline)
|
|
08.04.2011, 11:55
|
#11
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблемка с памятью
кадры 256*256 сократят потери в 4 раза например.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.04.2011, 12:02
|
#12
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблемка с памятью
Хыхы Сделал-таки 16 кадров. Заметна покадровость, но пофиг. Жрет теперь 58 мегов по максимуму. Тока косячок - движок рисует только то, что находится в пределах экрана. Т.е. пока деревья вдалеке, они не рисуются. Но как начинаю подходить - пару секунд подтормаживает (при этом хавает ~ 16 M а потом уже все ОК.
Т.е. это уже мне не исправить, это есть косяк блица, и после загрузки надо тупо прорисовать все кадры всех деревьев, чтоб они потом не лагали. Ща будет тест
[UPD]
ПРорисовав все кадры всех деревьев после загрузки медии перестало лагать. Всем спасибо
|
(Offline)
|
|
08.04.2011, 15:00
|
#13
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Проблемка с памятью
Совет насчёт кадров 256x256 - дельный. Плюс подбери размер самой текстуры, максимально квадратный. Если 16 кадров, то вся текстура будет 1024х1024 - что сильно снизит затраты на видео память.
|
(Offline)
|
|
08.04.2011, 15:15
|
#14
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблемка с памятью
В Бмаксе квадратным должен быть именно кадр, т.к. текстура физически режется на более мелкие, размер исходной текстуры значения не имеет.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:56.
|