Вход/Регистрация
Программирование мобильных устройств на платформе .NET Compact Framework
вернуться

Салмре Иво

Шрифт:

private static Bitmap m_CaveMan_Bitmap3;

private static Bitmap m_CaveMan_Bitmap4;

private static System.Collections.ArrayList m_colCaveManBitmaps;

//--------------------------------------------------

//Создать и загрузить массив изображений для спрайта

//--------------------------------------------------

public static System.Collections.ArrayList g_CaveManPictureCollection {

//Изображения загружаются лишь в том случае, если мы их еще не загрузили

if (m_CaveMan_Bitmap1 == null) {

//-----------------------------------------------------------------

//Загрузить изображения. Эти изображения хранятся в виде

//встроенных ресурсов в нашем двоичном приложении.

//

//Загрузка изображений из внешних файлов осуществляется аналогичным

//образом, но выполнить ее проще (нам достаточно лишь указать

//имя файла в конструкторе растровых изображений).

//------------------------------------------------------------------

//Получить ссылку на нашу двоичную сборку

System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly;

//Получить имя сборки

System.Reflection.AssemblyName thisAssemblyName = thisAssembly.GetName;

string assemblyName = thisAssemblyName.Name;

//Загрузить изображения в виде двоичных потоков из нашей сборки

m_CaveMan_Bitmap1 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(

assemblyName + ".Hank RightRunl.bmp"));

m_CaveMan_Bitmap2 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(

assemblyName + ".Hank_RightRun2.bmp"));

m_CaveMan_Bitmap3 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(

assemblyName + ".Hank_LeftRun1.bmp"));

m_CaveMan_Bitmap4 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(

assemblyName + ".Hank_LeftRun2.bmp"));

//Добавить их в коллекцию

m_colCaveManBitmaps = new System.Collections.ArrayList;

m_colCaveManBitmaps.Add(m_CaveMan_Bitmap1);

m_colCaveManBitmaps.Add(m_CaveMan_Bitmap2);

m_colCaveManBitmaps.Add(m_CaveMan_Bitmap3);

m_colCaveManBitmaps.Add(m_CaveMan_Bitmap4);

}

//Возвратить коллекцию

return m_colCaveManBitmaps;

}

} //Конец класса

Старайтесь избегать распределения памяти для объектов при выполнении повторяющихся или непрерывно продолжающихся операций рисования

Выполнение лишних операций размещения и уничтожения объектов в памяти является одной из наиболее распространенных причин ухудшения производительности графического кода. Графический код часто выполняется внутри циклов или многократно вызывается. Кроме того, поскольку графические объекты используют значительные объемы памяти, а также системные ресурсы, с их обслуживанием связаны сравнительно большие накладные расходы. Если ваше мобильное приложение распределяет и освобождает память всякий раз, когда необходимо визуализировать изображения, то вы неминуемо столкнетесь с проблемами нехватки памяти, что обусловит необходимость частого выполнения операций по сборке мусора, замедляющих работу приложения. В связи с этим необходимо предельно внимательно анализировать любые участки кода, требующие распределения памяти для объектов в процессе визуализации графики. Особенно это касается объектов, связанных с графическими ресурсами, но остается справедливым и по отношению к объектам другой природы (например, коллекциям, массивам, строкам), которые могут фигурировать в таком коде.

В частности, вы должны анализировать с этой точки зрения распределение памяти для следующих объектов.

? Объекты Bitmap. Часто возникают ситуации, в которых в качестве временного хранилища для изображения или части изображения, создаваемых вашим приложением, удобно использовать объект Bitmap. Если вашему приложению требуется пространство для рисования, то в этом нет ничего необычного; единственное, чего следует избегать — так это создания и уничтожения многих битовых изображений в циклах рисования. Обычно гораздо лучше иметь одно рабочее пространство, многократно используемое в качестве общего ресурса, чем нести дополнительные затраты, связанные с непрерывным созданием и уничтожением временных изображений. Размер такой временной памяти должен быть равен размеру наибольшего временного изображения, которое может понадобиться вашим процедурам (но не более того). Если временную память необходимо очищать, прежде чем использовать ее для рисования, то это можно сделать легко и быстро при помощи вызова Graphics.Clear. Кроме того, как продемонстрировано в приведенном выше примере кода, часто используемые растровые изображения имеет смысл загружать и кэшировать в памяти. Следите за тем, чтобы в каждый момент времени загружался только один экземпляр растрового изображения. Загрузка нескольких экземпляров идентичных изображений приведет к напрасному расходованию больших объемов памяти.

  • Читать дальше
  • 1
  • ...
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: