Литмир - Электронная Библиотека
Содержание  
A
A
Листинг 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);

  s_colPlayerBitmaps.Add(s_Player_Bitmap2);

  s_colPlayerBitmaps.Add(s_Player_Bitmap3);

  s_colPlayerBitmaps.Add(s_Player_Bitmap4);

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

 return s_colPlayerBitmaps;

 }

 private static System.Drawing.Pen s_blackPen;

 private static System.Drawing.Pen s_whitePen;

 private static System.Drawing.Imaging.ImageAttributes s_ImageAttribute;

 private static System.Drawing.Font s_boldFont;

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

 //Вызывается для освобождения от любых графических

 //ресурсов, которые могли быть кэшированы

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

 private static void g_CleanUpDrawingResources() {

  //Освободить память от черного пера, если таковое имеется

  if (s_blackPen !=null) {

   s_blackPen.Dispose();

   s_blackPen = null;

  }

  // Освободить память от белого пера, если таковое имеется

  if (s_whitePen != null) {

   s_whitePen.Dispose();

   r_whitePen = null;

  }

  //Освободить память от атрибута ImageAttribute, если таковой имеется.

  //Примечание. Метод Dispose() для этого типа не предусмотрен,

  //поскольку все его данные являются управляемыми

  if (s_ImageAttribute != null) {

   s_ImageAttribute = null;

68
{"b":"947732","o":1}