Тест скорости работы класса
Dictionary и класса
Hashtable.
Искал класс для хранения данных и нашел пару подходящих. На первый взгляд различие в них было только в названии, мне стало интересно в чем же между ними разница и я провел небольшой тест скорости работы того и другого.
Суть теста:
Пройдемся
for-ом по каждому из классов поочередно, сначала записывая, затем читая, и напоследок удаляя значения из списков.
Замерять скорость выполнения циклов будем с помощью класса
Stopwatch.
Код:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Diagnostics;
namespace DictionaryVsHashtable
{
class Program
{
static void Main(string[] args)
{
Hashtable hashtable = new Hashtable();
Dictionary<object, object> dictionary = new Dictionary<object, object>();
int hash_int, dict_int;
Stopwatch stopwatch = new Stopwatch();
#region HashTableTest
// Записываем
stopwatch.Start();
for (int i = 0; i<=100000; i++)
{
hashtable.Add(i, i);
}
stopwatch.Stop();
Console.WriteLine("Запись в Hashtable заняла: " + stopwatch.ElapsedMilliseconds+" миллисекунд.");
stopwatch.Reset();
// Читаем
stopwatch.Start();
for (int i = 0; i <= 100000; i++)
{
hash_int = (int)hashtable[i];
}
stopwatch.Stop();
Console.WriteLine("Чтение из Hashtable заняло: " + stopwatch.ElapsedMilliseconds + " миллисекунд.");
stopwatch.Reset();
// Удаляем
stopwatch.Start();
for (int i = 0; i <= 100000; i++)
{
hashtable.Remove(i);
}
stopwatch.Stop();
Console.WriteLine("Удалиние из Hashtable заняло: " + stopwatch.ElapsedMilliseconds + " миллисекунд.");
stopwatch.Reset();
#endregion
#region DictionaryTest
// Записываем
stopwatch.Start();
for (int i = 0; i <= 100000; i++)
{
dictionary.Add(i, i);
}
stopwatch.Stop();
Console.WriteLine("Запись в Dictionary заняла: " + stopwatch.ElapsedMilliseconds + " миллисекунд.");
stopwatch.Reset();
// Читаем
stopwatch.Start();
for (int i = 0; i <= 100000; i++)
{
dict_int = (int)dictionary[i];
}
stopwatch.Stop();
Console.WriteLine("Чтение из Dictionary заняло: " + stopwatch.ElapsedMilliseconds + " миллисекунд.");
stopwatch.Reset();
// Удаляем
stopwatch.Start();
for (int i = 0; i <= 100000; i++)
{
dictionary.Remove(i);
}
stopwatch.Stop();
Console.WriteLine("Удалиние из Dictionary заняло: " + stopwatch.ElapsedMilliseconds + " миллисекунд.");
stopwatch.Reset();
#endregion
}
}
}
Результат:
| Действие | Hashtable | Dictionary |
| Запись | 9 мс | 25 мс |
| Чтение | 8 мс | 4 мс |
| Удаление | 5 мс | 4 мс |
Но т.к. ключ (key) значений (values) у меня будет фиксированным, я изменил следующую строку:
Dictionary<object, object> dictionary = new Dictionary<object, object>();
на:
Dictionary<int, object> dictionary = new Dictionary<int, object>();
Теперь результат выглядит так:
| Действие | Hashtable | Dictionary |
| Запись | 9 мс | 13 мс |
| Чтение | 8 мс | 2 мс |
| Удаление | 5 мс | 2 мс |
Если еще и значения буду фиксированными, то
Dictionary будет работать еще быстрее.
Мой выбор —
Dictionary.
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.