Сроки Конструктивные и деструктивные реверсы
У меня есть домашнее задание, в котором я должен конструктивно и деструктивно перевернуть список массивов и рассчитать его для различных длин списка. Мой 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) и распечатайте его. Возможно, вы захотите напечатать итоговые милисекунды, так как этот вид операции очень быстрый