Повышение эффективности "перетасовки"

Сейчас я использую следующий код для создания расширения Shuffle:

public static class SiteItemExtensions
{
    public static void Shuffle<T>(this IList<T> list)
    {
        var rng = new Random();
        int n = list.Count;
        while (n > 1)
        {
            n--;
            int k = rng.Next(n + 1);
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
}

Я ищу более быстрый и эффективный способ сделать это. Сейчас, используя класс Stopwatch, на перетасовку 100 000 000 элементов уходит около 20 секунд. Есть ли у кого-нибудь идеи, как сделать это быстрее?

5
задан BrokenGlass 30 September 2011 в 02:17
поделиться