Форум программистов, компьютерный форум CyberForum.ru

Программирование Windows Phone

Войти
Регистрация
Восстановить пароль
 
vladyxa96
1 / 1 / 0
Регистрация: 02.07.2013
Сообщений: 37
#1

Цикл очистки памяти в Dll библиотеке - Windows Phone

03.02.2014, 21:17. Просмотров 673. Ответов 0
Метки нет (Все метки)

Здравствуйте! Недавно вышла GTA SA на WP8, она отлично работает на устройствах с 1 гб оперативки. Но также запускается и на 512 ОЗУ только проблема в том что после 1 мин игры происходит вылет. После недолгих опытов, попробовали сжать текстуры, и это помогло, продлило время игры на 5-7 минут. Сразу стало понятно что это происходит потому что памяти достигает максимального значения, а очистка не происходит. Начали декомпилировать библиотеки и искать причину но нечего толкового не нашли.
Вот три библиотеки GTA.zip которые есть в игре:
Zlib.Portable.dll
WP8Comp.dll
GTASA.dll


В библиотеке GTASA.dl: нашел такой код:
Visual Basic
1
2
3
4
5
private Dictionary<string, wp8Image> imageCache;
private Dictionary<string, wp8Image>] imageCache1;
private const int MAX_IMAGE_FILES = 0x40; - это размер 64
private const int MAX_RESOURCE_FILES = 0x40; - это размер 64
private static ResourceFactoryImpl me;
и два цикла
Visual Basic
1
2
3
4
5
6
7
8
public int generateImageHandle(Size size)
{
int num = this.getNextImageGenHandle();
wp8Image image = new wp8Image(new RectangleShape(0.0, 0.0, size.get_Width(), size.get_Height()), "", new Point(0.0, 0.0), size);
string str = num.ToString();
this.imageCache1[0x3f][str] = image;
return num;
}
Visual Basic
1
2
3
4
5
6
me = this; 
 
for (int i = 0; i < 0x40; i++) 
{ this.imageCache1[i] = new Dictionary<string, wp8Image>();
 } 
}
Изменения в них значений [0x3f] и 0x40 не помогло, либо я не знаю на какое нужно, но я его и понижал и повышал.

Библиотека Zlib.Portable.dll я так понял отвечает за распаковку кэша игры, там есть такие интересные значения:
Visual Basic
1
2
3
4
5
6
7
8
9
return this._bufferSize;
}
set
{
if (value < 0x400)
{
throw new ArgumentOutOfRangeException("BufferSize", "BufferSize must be greater than 1024 bytes]");
}
this._bufferSize = value;
Что это за цикл я не понял? Так как менял значения 0x400 на 0x200 и 0x70 и ничего не помогло.

На счет WP8Comp.dll она не открывается обычным компилятором, только IDA но там не понятный для меня язык, так как библиотека управляет всем процессом игры)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2014, 21:17     Цикл очистки памяти в Dll библиотеке
Посмотрите здесь:

Точка входа в процедуру SMaplS_IP_EBP_12 не найдена в библиотеке DLL KERNEL 32 dll
Ошибка очистки динамической памяти C++ Builder
Точка входа в процедуру REGISTER APPLICATION RESTART не найдена в библиотеке DLL KERNEL 32.dll
Приложение Silverlight+XNA, очистка памяти Windows Phone
Где найти цикл очистки памяти в Dll библиотеке C# .NET 4.x
Цикл mysql_fetch_assoc без очистки значений PHP
Использование dll в windows phone приложении Windows Phone
Точка входа в процедуру _ZSt24_thow_out_of_range_fmtPKcz не найдена в библиотеке dll libstdc++6.dll
Windows Phone Непонятная ошибка с System.Windows.dll
Точка входа в процедуру _except_handler4_common не найдена в библиотеке DLL msvcrt.dll Софт
Восстановление dll файлов поврежденных вирусами "точка входа в процедуру _wcsupr_s не найдена в библиотеке dll
Ошибка: "Точка входа в процедуру terminate не найдена в библиотеке DLL C:\Windows\SYSTEM32\VCRUNTIME140.dll" Windows 8, 8.1

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru