Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
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) {
//Вызвать сборщик мусора, чтобы тест
//начинался с чистого состояния.
//ПРИБЕГАЙТЕ К ЭТОЙ МЕРЕ ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ! Вызовы
//сборщика мусора в программах вручную будут приводить к снижению
//общей производительности приложений!
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. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Газлайтер. Том 16
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Стрелок
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Шатун. Лесной гамбит
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Проклятый Лекарь V
5. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
На границе империй. Том 3
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
Новый Рал
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Его наследник
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Венецианский купец
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Мастер темных Арканов
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Всплеск в тишине
5. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Начальник милиции
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Возвышение Меркурия. Книга 2
2. Меркурий
Фантастика:
фэнтези
5.00