Страница 1 из 1

FastHashCollection, небольшая часть моей сборки

СообщениеДобавлено: 21 апр 2016, 03:34
bwolf88
Выложил кусочек своей либы, а именно быстрые Dictionary и Hash и QueueDictionary, QueueHash. Первые работают ~2,5 раза быстрее нативных, но! только при использовании небольших структур в качестве ключей. Идеально подходит для Int, long и других (кастомных) в основе которых быстрое вычисление хеша.
Для Queue тесты делал давно, но в основе лежат первые 2 коллекции. Использую в основном для актуализации значений, например заменяя устаревшие данные в списке задач если пришли новые без повторного добавления индекса.

Тестировал только на своей машине на Win 7-10, как на других системах и осях сказать не могу :-\.

Ссылка на исходники https://github.com/LuchunPen/FastHashCollection
Возможно в будущем еще чего нибудь открою.

Re: FastHashCollection, небольшая часть моей сборки

СообщениеДобавлено: 07 июн 2016, 19:54
Ert Donuell
Я бы заменил

Синтаксис:
Используется csharp
public static readonly int[] primesM2 =
{
    4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
    8192, 16384, 32768, 65536, 131072, 262144, 524288,
    1048576, 2097152, 4194304, 8388608
};

public static int GetPrimeM2(int capacity)
{
    if (capacity < primesM2[0]) { return primesM2[0]; }
    for (int i = 0; i < primesM2.Length; i++)
    {
        if (primesM2[i] >= capacity) { return primesM2[i]; }
    }
    return primesM2[primesM2.Length - 1];
}


на

Синтаксис:
Используется csharp
public static int GetPrimeM2(int capacity)
{
    var result = 4;
    while (result < capacity)
        result <<= 1;
    return result;
}


:)

Re: FastHashCollection, небольшая часть моей сборки

СообщениеДобавлено: 07 июн 2016, 20:20
bwolf88
Фактически начальный размер там нужен только 1 раз при создании. Это в традиционном Dictionary при ресайзе размер контролируется значениями из таблицы.