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

Салмре Иво

Шрифт:
Используя кэширование, руководствуйтесь здравым смыслом

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

Листинг 8.1. Применение отложенной загрузки, кэширования и освобождения графических ресурсов 

using system;

public class GraphicsGlobals {

 private static System.Drawing.Bitmap s_Player_Bitmap1;

 private static System.Drawing.Bitmap s_Player_Bitmap2;

 private static System.Drawing.Bitmap s_Player_Bitmap3;

 private static System.Drawing.Bitmap s_Player_Bitmap4;

 private static System.Collections.ArrayList s_colPlayerBitmaps;

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

 //Освободить все ресурсы

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

 public static void g_PlayerBitmapsCollection_CleanUp {

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

if (s_colPlayerBitmaps == null) {

return;

}

//Дать указание каждому из этих объектов освободить

//любые удерживаемые ими неуправляемые ресурсы

s_Player_Bitmap1.Dispose;

s_Player_Bitmap2.Dispose;

s_Player_Bitmap3.Dispose;

s_Player_Bitmap4.Dispose;

//Обнулить каждую из этих переменных, чтобы им не соответствовали

//никакие объекты в памяти

s_Player_Bitmap1 = null;

s_Player_Bitmap2 = null;

s_Player_Bitmap3 = null;

s_Player_Bitmap4 = null;

//Избавиться от массива

s_colPlayerBitmaps = null;

 }

 //Функция: возвращает коллекцию изображений

 public static System.Collections.ArrayList g_PlayerBitmapsCollection {

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

//Если изображения уже загружены, их достаточно только возвратить

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

if (s_colPlayerBitmaps != null) {

return s_colPlayerBitmaps;

}

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

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

System.Reflection.AssemblyName thisAssemblyName = thisAssembly.GetName;

string assemblyName = thisAssemblyName.Name;

//Загрузить изображения

s_Player_Bitmap1 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(assemblyName + ".Hank_RightRun1.bmp"));

s_Player_Bitmap2 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(assemblyName + ".Hank RightRun2.bmp"));

s_Player_Bitmap3 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(assemblyName + ".Hank_LeftRun1.bmp"));

s_Player_Bitmap4 = new System.Drawing.Bitmap(

thisAssembly.GetManifestResourceStream(assemblyName + ".Hank_LeftRun2.bmp"));

//Добавить изображения в коллекцию

s_colPlayerBitmaps = new System.Collections.ArrayList;

s_colPlayerBitmaps.Add(s_Player_Bitmap1);

  • Читать дальше
  • 1
  • ...
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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