[ Видят также этот вопрос ]
, я изменил ответ Marc, чтобы использовать фактические случайные числа и на самом деле сделать ту же работу во всех случаях.
Результаты:
for foreach Array : 1575ms 1575ms (+0%) List : 1630ms 2627ms (+61%) (+3%) (+67%) (Checksum: -1000038876)
Скомпилированный как Выпуск под VS 2008 SP1. Работая, не отлаживая на Q6600@2.40GHz.NET 3,5 SP1.
Код:
class Program
{
static void Main(string[] args)
{
List list = new List(6000000);
Random rand = new Random(1);
for (int i = 0; i < 6000000; i++)
{
list.Add(rand.Next());
}
int[] arr = list.ToArray();
int chk = 0;
Stopwatch watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
int len = list.Count;
for (int i = 0; i < len; i++)
{
chk += list[i];
}
}
watch.Stop();
Console.WriteLine("List/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk);
chk = 0;
watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
int len = arr.Length;
for (int i = 0; i < len; i++)
{
chk += arr[i];
}
}
watch.Stop();
Console.WriteLine("Array/for: {0}ms ({1})", watch.ElapsedMilliseconds, chk);
chk = 0;
watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
foreach (int i in list)
{
chk += i;
}
}
watch.Stop();
Console.WriteLine("List/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk);
chk = 0;
watch = Stopwatch.StartNew();
for (int rpt = 0; rpt < 100; rpt++)
{
foreach (int i in arr)
{
chk += i;
}
}
watch.Stop();
Console.WriteLine("Array/foreach: {0}ms ({1})", watch.ElapsedMilliseconds, chk);
Console.WriteLine();
Console.ReadLine();
}
}
Это не не лучший ответ. См. Ответ bialix, который намного проще. Я оставлю это здесь только для справки.
Вот что я считаю наиболее чистым методом:
Создайте ветку:
bzr branch mytree repair-path
cd в ремонтную ветку
Revert только отсутствующий файл в его последней редакции (например, 287 в этом примере):
bzr revert -r 287 lost.file
Зафиксировать изменение
bzr commit -m "Отключить мою ногу"
cd назад в основную ветку
слияние в исправлении
bzr merge repair-path
Когда все будет готово, зафиксируйте слияние и удалите ветвь восстановления.
Вы можете сделать это, просто вернувшись в исходная рабочая ветка, но, вероятно, лучше не делать этого. Вам также нужно побеспокоиться (немного) о любых незафиксированных изменениях.
Если вы знаете номер ревизии при удалении этого файла (вы можете просмотреть историю с помощью bzr log -v
), вы можете воскресить этот файл с помощью команды слияния. Итак, для файла foo
и номера ревизии N
вам необходимо выполнить команду:
bzr merge foo -r N..N-1
Например, для ревизии 287:
bzr merge foo -r 287..286
Эта команда восстановит ваш файл, как в ревизии 287. Вам необходимо чтобы зафиксировать это изменение, и все готово.
Самый простой способ - просто использовать bzr revert
с номером версии перед удалением файла:
bzr revert -rX path/to/file
bzr commit -m 'Bringing path/to/file back'
Вам не нужно ничего объединять.
]