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

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

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

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

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

 System.GC.Collect;

 string[] testArray = null;

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

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

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

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

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

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

 PerformanceSampling.StartSample(2, "DefferedObjects");

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

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

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

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

 LessAllocationsWorkerClass workerClass1;

 workerClass1 = new LessAllocationsWorkerClass;

 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.CompareMiddleSegment("blue") == 0) {

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

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

    testArray[idx] = workerClass1.getWholeString;

   }

  }

 }

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

 PerformanceSampling.StopSample(2);

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

}

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

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;

Перейти на страницу:

Похожие книги