Сроки Конструктивные и деструктивные реверсы

У меня есть домашнее задание, в котором я должен конструктивно и деструктивно перевернуть список массивов и рассчитать его для различных длин списка. Мой Arraylist обновляется каждый раз, когда я запускаю его, но, похоже, он не регистрируется в этих методах, так как я не получаю значения для своего времени и не могу найти свои ошибки.

Мой код до сих пор выглядит следующим образом.

public ArrayList ConstructiveReverseDeveloped()
    {            
        ArrayList Temp = new ArrayList();
        for (int i = Developed.Count - 1; i >= 0; i--)
        {
            Apps cur = (Apps)Developed[i];
            Temp.Add(cur);
        }
        return Temp;
    }
    public void TimingConstructive()
    {
        DateTime startTime;
        TimeSpan endTime;
        startTime = DateTime.Now;
        ConstructiveReverseDeveloped();
        endTime = DateTime.Now.Subtract(startTime);
        Console.WriteLine("---------------------------------------------------------");
        Console.WriteLine("Time taken for Constructive Reverse of Developed : {0}", endTime);
    }

public void DestructiveReverseDeveloped()
    {
        //ArrayList x = cloneDeveloped();
        for (int i = Developed.Count - 1; i >= 0; i--)
        {
            Apps cur = (Apps)Developed[i];
            Developed.RemoveAt(i);
            Developed.Add(cur);
        }
    }
    public void TimingDestructive()
    {
        DateTime startTime;
        TimeSpan endTime;
        startTime = DateTime.Now;
        DestructiveReverseDeveloped();
        endTime = DateTime.Now.Subtract(startTime);
        Console.WriteLine("Time taken for Destructive Reverse of Developed : {0}",endTime.ToString());
        Console.WriteLine("---------------------------------------------------------");
    }

Ребята, можете ли вы указать мне правильное направление, почему я не получаю значения времени? Я не хочу точных ответов, а просто помочь в понимании.

Спасибо

2 ответа

Решение

Вы бы предпочли иметь класс таймера. Ваш метод синхронизации не учитывает методы сборки мусора и финализатора.

Вот пример

class Timer
{
    private DateTime startingTime;
    // stores starting time of code being tested
    private TimeSpan duration;
    // stores duration of code being tested
    public void startTime()
    {
        GC.Collect();   // force garbage collection
        GC.WaitForPendingFinalizers();
        /* wait until all heap contents finalizer methods have completed for removal of contents to be permanent */
        startingTime = DateTime.Now;
        // get current date/time
    }
    public void stopTime()
    {
        // .Subtract: TimeSpan subtraction
        duration = DateTime.Now.Subtract(startingTime);
    }

    public TimeSpan result()
    {
        return duration;
    }


}

Ваш код будет что-то вроде

public void TimingDestructive()
{
    Timer Time = new Timer();
    Time.startTime();
    DestructiveReverseDeveloped();
    Time.stopTime();
    Console.WriteLine("Time taken for Destructive Reverse of Developed : {0}ms",Time.result().TotalMilliseconds);
    Console.WriteLine("---------------------------------------------------------");

И не следует ли вам клонировать свои списки перед выполнением методов обращения? Если вы планируете их клонировать, клонируйте их прямо перед запуском таймера и метода реверсирования.

Вы не хотите DateTime от DateTime.Substract. Вместо этого просто получите TimeSpan (DateTime.Now-startTime) и распечатайте его. Возможно, вы захотите напечатать итоговые милисекунды, так как этот вид операции очень быстрый

Другие вопросы по тегам