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

Салмре Иво

Шрифт:
empty-line/>

 //Возвращает все три сегмента, объединенные символами "_"

 public string getWholeString {

return m_beginning_segment + "_" + m_middle_segment + "_" + m_end_segment;

 }

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

Повторно используйте размещенные в памяти объекты при любом удобном случае

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

Листинг 8.5. Тестовый пример, демонстрирующий уменьшение объема памяти, распределяемой для объектов (типичный образец улучшения первоначального варианта реализации интересующей нас функции) 

Примечание. В этом примере используется класс PerformanceSampling, определенный ранее в данной книге. 

private void button3_Click(object sender, System.EventArgs e) {

 //Вызвать сборщик мусора, чтобы тест

 //начинался с чистого состояния.

 //ПРИБЕГАЙТЕ К ЭТОЙ МЕРЕ ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ! Вызовы

 //сборщика мусора в программах вручную будут приводить к снижению

 //общей производительности приложений!

 System.GC.Collect;

 string[] testArray = null;

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

 //Просмотреть элементы массива и найти

 //те из них, в которых средним словом является

 //"blue". Заменить "blue" на "orange"

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

 //Запустить секундомер!

 PerformanceSampling.StartSample(1, "LessWasteful");

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

 //БОЛЕЕ ЭКОНОМНЫЙ СПОСОБ: Распределить память

 //для объекта до вхождения в цикл

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

 LessWastefulWorkerClass workerClass1;

 workerClass1 = new LessWastefulWorkerClass;

 int outerLoop;

 for (outerLoop = 0; outerLoop < LOOP_SIZE; outerLoop++) {

//Присвоить элементам массива значения, которые

//мы хотим использовать при тестировании

ResetTestArray(ref testArray);

int topIndex = testArray.Length - 1;

for(int idx = 0; idx <= topIndex; idx++) {

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

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

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

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

//workerClass1 = new WastefulWorkerClass(

// testArray[topIndex]);

workerClass1.ReuseClass(testArray[idx]);

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

if (workerClass1.MiddleSegment == "blue") {

//Заменить средний сегмент

workerClass1.MiddleSegment = "orange";

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

testArray[idx] = workerClass1.getWholeString;

}

}

 }

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

 PerformanceSampling.StopSample(1);

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

}

Листинг 8.6. Рабочий класс для второго тестового примера

using System;

public class LessWastefulWorkerClass {

 private string m_beginning_segment;

 public string BeginSegment {

  • Читать дальше
  • 1
  • ...
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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