Иво Салмре

Книги → Программирование мобильных устройств на платформе .NET Compact Framework → Избегайте размещения в памяти лишних объектов

   //Теперь вместо повторного распределения памяти для объекта

   //нам достаточно лишь повторно воспользоваться им

   //Кроме того: в этом варианте реализации дополнительные

   // строки НЕ создаются

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

   //workerClass1 = new WastefulWorkerClass(

   // testArray[topIndex]);

   workerClass1.ReuseClass(testArray[idx]);

   //Если средним словом является "blue", заменить его на "orange"

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

   //Более экономный способ:

   //При таком способе сравнения не требуется создавать

   //никаких дополнительных строк

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

   if (workerClass1.CompareMiddleSegment("blue") == 0) {

    //Заменить средний сегмент workerClass1.MiddleSegment = "orange";

    //Заменить слово

    testArray[idx] = workerClass1.getWholeString();

   }

  }

 }

 //Остановить секундомер!

 PerformanceSampling.StopSample(2);

 System.Windows.Forms.MessageBox.Show(PerformanceSampling.GetSampleDurationText(2));

}

using System;

public class LessAllocationsWorkerClass {

 public string MiddleSegment {

  set { m_middleSegmentNew= value; }

 }

 private string m_middleSegmentNew;

 private int m_index_1st_undscore;

 private int m_index_2nd undscore;

 private string m_stringIn;

 public void ReuseClass(string in_word) {

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

  //Для повторного использования класса необходимо

  //полностью очистить внутреннее состояние

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

  m_index_1st_undscore = -1;

  m_index_2nd_undscore = -1;

  m_middleSegmentNew= null;

  m_stringIn = in_word; //Это не приводит к созданию копии строки

  //Осуществляем поиск символов подчеркивания ("_") в строке

  m_index_1st_undscore = in_word.IndexOf("_",0);

  //B случае отсутствия символов "_" все, что нам нужно, это первый сегмент

  if (m_index_1st_undscore == -1) {

   return;

  }

  //Найти второй символ " "

  m_index 2nd_undscore = in_word.IndexOf(" ", m_index_1st_undscore + 1);

 }

 public int CompareMiddleSegment(string compareTo) {

  //B случае отсутствия второго символа "_" отсутствует и средний сегмент

  if (m_index_2nd_undscore < 0) {

   //Если мы сравниваем с пустой строкой,

   //то это означает совпадение

   if((compareTo == null) || (compareTo == "")) {return 0;}

   return -1;

  }

  //Сравнить средний сегмент с первым и вторым сегментами

  return System.String.Compare(

   m_stringIn, m_index_1st_undscore + 1, compareTo, 0, m_index_2nd_undscore - m_index_1st_undscore -1);

 }

 public string getWholeString() {

  //Если полученный средний сегмент не является новым,

  //возвратить исходный сегмент

  if (m_middleSegmentNew == null) {

   return m_stringIn;

  }

  //Создать возвращаемую строку

← предыдущая следующая →

Страницы раздела: 1 2 3

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.