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

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

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

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

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
 
namespace Delegates
{
    class Program
    {
        static int[] array;
        delegate bool Comparison(int number);
 
        static void Main(string[] args)
        {
            Init(500000);
 
            Stopwatch sw = new Stopwatch();
            List<int> result = new List<int>();
            List<long> timing = new List<long>();
 
 
            for(int i = 0; i < 100; i++)
            {
                sw.Reset();
                sw.Start();
                // 1. Метод, непосредственно реализующий поиск
                result = FindPositive();
                timing.Add(sw.ElapsedMilliseconds);
            }
            Console.WriteLine("Method 1 average: {0} msec", timing.Average());
 
 
            timing.Clear();
            for (int i = 0; i < 100; i++)
            {
                sw.Reset();
                sw.Start();
                // 2. Через экземпляр делегата
                Comparison comp = new Comparison(IsPositive);
                result = Find(comp);
                timing.Add(sw.ElapsedMilliseconds);
            }
            Console.WriteLine("Method 2 average: {0} msec", timing.Average());
 
 
            timing.Clear();
            for (int i = 0; i < 100; i++)
            {
                sw.Reset();
                sw.Start();
                Comparison comp = new Comparison(IsPositive);
                // 3. Через анонимный метод
                result = Find(delegate (int number)
                {
                    return number > 0;
                });
                timing.Add(sw.ElapsedMilliseconds);
            }
            Console.WriteLine("Method 3 average: {0} msec", timing.Average());
 
 
            timing.Clear();
            for (int i = 0; i < 100; i++)
            {
                sw.Reset();
                sw.Start();
                Comparison comp = new Comparison(IsPositive);
                // 4. Через лямбду
                result = Find(number => number > 0);
                timing.Add(sw.ElapsedMilliseconds);
            }
            Console.WriteLine("Method 4 average: {0} msec", timing.Average());
 
 
            timing.Clear();
            for (int i = 0; i < 100; i++)
            {
                sw.Reset();
                sw.Start();
                Comparison comp = new Comparison(IsPositive);
                // 5. Через LINQ
                result = (from number in array
                          where number > 0
                          select number).ToList();
                timing.Add(sw.ElapsedMilliseconds);
            }
            Console.WriteLine("Method 5 average: {0} msec", timing.Average());
 
 
            Console.ReadKey();
        }
 
        static void Init(int size)
        {
            array = new int[size];
            Random rnd = new Random();
            for(int i = 0; i < size; i++)
            {
                array[i] = rnd.Next(-10, 10);
            }
        }
 
        static List<int> FindPositive()
        {
            List<int> result = new List<int>();
 
            foreach(int elem in array)
            {
                if (elem > 0) result.Add(elem);
            }
 
            return result;
        }
 
        static List<int> Find(Comparison comp)
        {
            List<int> result = new List<int>();
 
            foreach (int elem in array)
            {
                if (comp(elem)) result.Add(elem);
            }
 
            return result;
        }
 
        static bool IsPositive(int number)
        {
            return number > 0;
        }
    }
}

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


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

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

6   голосов , оценка 4.167 из 5
Похожие ответы