Чтение онлайн

ЖАНРЫ

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

Салмре Иво

Шрифт:

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

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

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

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

 PerformanceSampling.StartSample(0, "WastefulWorkerClass");

 WastefulWorkerClass workerClass1;

 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[idx]);

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

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

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

workerClass1.MiddleSegment = "orange";

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

testArray[idx] = workerClass1.getWholeString;

}

} //конец внутреннего цикла for

 }//конец внешнего цикла for

 //Получить время окончания теста

 PerformanceSampling.StopSample(0);

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

}

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

using System;

public class WastefulWorkerClass {

 private string m_beginning_segment;

 public string BeginSegment {

get { return m_beginning_segment; }

set { m_beginning_segment = value; }

 }

 private string m_middle_segment;

 public string MiddleSegment {

get { return m_middle_segment; }

set { m_middle_segment = value; }

 }

 private string m_end_segment;

 public string EndSegment {

get { return m_end_segment; }

set { m_end_segment = value; }

 }

 public WastefulWorkexClass(string in_word) {

int index_segment1;

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

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

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

if (index_segment1 == -1) {

m_beginning_segment = in_word;

m_middle_segment = "";

m_end_segment = "";

return;

}

//Если присутствует символ "_", усечь его

else {

//Если первым символом является "_", то первым сегментом будет ""

if (index_segment1 == 0) {

m_beginning_segment = "";

} else {

//Первый сегмент

m_beginning_segment = in_word.Substring(0, index_segment1);

}

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

int index_segment2;

index_segment2 = in_word.IndexOf("_", index_segment1 + 1);

//Второй символ "_" отсутствует

if (index_segment2 == -1) {

m_middle_segment = "";

m_end_segment = in_word.Substring(index_segment1 + 1);

return;

}

//Установить последний сегмент

m_middle_segment = in_word.Substring(index_segment1 + 1, index_segment2 - index_segment1 -1);

m_end_segment = in word.Substring(index segment2 + 1);

 }

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

 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) {

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

Поделиться с друзьями: