Замеры времени исполнения методов - C#

Узнай цену своей работы

Формулировка задачи:

Есть задача. Написать методы поиска элементов в массиве (например, поиск всех положительных элементов) в виде: 1. метода, непосредственно реализующего поиск; 2. метода, которому условие поиска передаётся через экземпляр делегата; 3. метода, которому условие поиска передаётся через делегат в виде анонимного метода; 4. метода, которому условие поиска передаётся через делегат в виде лямбда-выражения; 5. LINQ-выражения Сравнить скорость выполнения вычислений. Примечания: 1. Не забывайте, что LINQ-выражения выполняются в отложенном режиме, так что если вы вдруг получили 0, не удивляйтесь: вы не то измеряете. 2. Для выполнения временных замеров стоит использовать класс Stopwatch. 3. Выберите размер поискового массива с запасом. Лучше поставить размер не менее нескольких сотен элементов. 4. Выполните каждое измерение в цикле не менее нескольких десятков раз. Определите медиану измерений (значение, расположенное посередине, если результаты измерений отсортировать по возрастанию или убыванию). Подскажите пожалуйста как решать.

Решение задачи: «Замеры времени исполнения методов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5.  
  6. namespace Delegates
  7. {
  8.     class Program
  9.     {
  10.         static int[] array;
  11.         delegate bool Comparison(int number);
  12.  
  13.         static void Main(string[] args)
  14.         {
  15.             Init(500000);
  16.  
  17.             Stopwatch sw = new Stopwatch();
  18.             List<int> result = new List<int>();
  19.             List<long> timing = new List<long>();
  20.  
  21.  
  22.             for(int i = 0; i < 100; i++)
  23.             {
  24.                 sw.Reset();
  25.                 sw.Start();
  26.                 // 1. Метод, непосредственно реализующий поиск
  27.                 result = FindPositive();
  28.                 timing.Add(sw.ElapsedMilliseconds);
  29.             }
  30.             Console.WriteLine("Method 1 average: {0} msec", timing.Average());
  31.  
  32.  
  33.             timing.Clear();
  34.             for (int i = 0; i < 100; i++)
  35.             {
  36.                 sw.Reset();
  37.                 sw.Start();
  38.                 // 2. Через экземпляр делегата
  39.                 Comparison comp = new Comparison(IsPositive);
  40.                 result = Find(comp);
  41.                 timing.Add(sw.ElapsedMilliseconds);
  42.             }
  43.             Console.WriteLine("Method 2 average: {0} msec", timing.Average());
  44.  
  45.  
  46.             timing.Clear();
  47.             for (int i = 0; i < 100; i++)
  48.             {
  49.                 sw.Reset();
  50.                 sw.Start();
  51.                 Comparison comp = new Comparison(IsPositive);
  52.                 // 3. Через анонимный метод
  53.                 result = Find(delegate (int number)
  54.                 {
  55.                     return number > 0;
  56.                 });
  57.                 timing.Add(sw.ElapsedMilliseconds);
  58.             }
  59.             Console.WriteLine("Method 3 average: {0} msec", timing.Average());
  60.  
  61.  
  62.             timing.Clear();
  63.             for (int i = 0; i < 100; i++)
  64.             {
  65.                 sw.Reset();
  66.                 sw.Start();
  67.                 Comparison comp = new Comparison(IsPositive);
  68.                 // 4. Через лямбду
  69.                 result = Find(number => number > 0);
  70.                 timing.Add(sw.ElapsedMilliseconds);
  71.             }
  72.             Console.WriteLine("Method 4 average: {0} msec", timing.Average());
  73.  
  74.  
  75.             timing.Clear();
  76.             for (int i = 0; i < 100; i++)
  77.             {
  78.                 sw.Reset();
  79.                 sw.Start();
  80.                 Comparison comp = new Comparison(IsPositive);
  81.                 // 5. Через LINQ
  82.                 result = (from number in array
  83.                           where number > 0
  84.                           select number).ToList();
  85.                 timing.Add(sw.ElapsedMilliseconds);
  86.             }
  87.             Console.WriteLine("Method 5 average: {0} msec", timing.Average());
  88.  
  89.  
  90.             Console.ReadKey();
  91.         }
  92.  
  93.         static void Init(int size)
  94.         {
  95.             array = new int[size];
  96.             Random rnd = new Random();
  97.             for(int i = 0; i < size; i++)
  98.             {
  99.                 array[i] = rnd.Next(-10, 10);
  100.             }
  101.         }
  102.  
  103.         static List<int> FindPositive()
  104.         {
  105.             List<int> result = new List<int>();
  106.  
  107.             foreach(int elem in array)
  108.             {
  109.                 if (elem > 0) result.Add(elem);
  110.             }
  111.  
  112.             return result;
  113.         }
  114.  
  115.         static List<int> Find(Comparison comp)
  116.         {
  117.             List<int> result = new List<int>();
  118.  
  119.             foreach (int elem in array)
  120.             {
  121.                 if (comp(elem)) result.Add(elem);
  122.             }
  123.  
  124.             return result;
  125.         }
  126.  
  127.         static bool IsPositive(int number)
  128.         {
  129.             return number > 0;
  130.         }
  131.     }
  132. }

ИИ поможет Вам:


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

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы