Сроки одной операции очень опасны - малейшее заикание может иметь огромное значение в результатах.Кроме того, не ясно, что вы сделали что-нибудь с LinkedList<T>
перед этим кодом, что означает, что вы будете синхронизировать JITting AddFirst
и, возможно, даже целые другие задействованные типы.
Сроки только первая вставка довольно сложна, так как, как только вы это сделали, вы не сможете легко повторить это.Тем не менее, вы можете время «вставить и удалить» несколько раз, как этот код:
using System;
using System.Collections.Generic;
using System.Diagnostics;
class Program
{
public static void Main(string[] args)
{
// Make sure we've JITted the LinkedList code
new LinkedList<string>().AddFirst("ignored");
LinkedList<string> list = new LinkedList<string>();
TimeInsert(list);
list.AddFirst("x");
TimeInsert(list);
list.AddFirst("x");
TimeInsert(list);
list.AddFirst("x");
}
const int Iterations = 100000000;
static void TimeInsert(LinkedList<string> list)
{
GC.Collect();
GC.WaitForPendingFinalizers();
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < Iterations; i++)
{
list.AddFirst("item");
list.RemoveFirst();
}
sw.Stop();
Console.WriteLine("Initial size: {0}; Ticks: {1}",
list.Count, sw.ElapsedTicks);
}
}
Мои результаты:
Initial size: 0; Ticks: 5589583
Initial size: 1; Ticks: 8137963
Initial size: 2; Ticks: 8399579
Это то, что я ожидал, в зависимости отво внутреннем представлении есть немного больше работы, связанной с подключением «предыдущей главы» при добавлении и удалении к уже заполненному списку.
Я предполагаю, что вы видите время JIT, но на самом деле ваш кодне совсем точное время, чтобы быть полезным, ИМО.