Словарь .NET по сравнению с другими управляемыми пользовательскими структурами данных, почему словарь .NET настолько быстро? [дубликат]

8
задан Andrew 18 February 2010 в 20:28
поделиться

3 ответа

Нет, если ваша программа является закрытым исходным кодом и вы хотите установить связь с LGPL-версией Qt, вы должны использовать динамическую связь. Если вы хотите статически связать, то вы должны купить лицензию на Qt.

Для использования кода LGPL в проекте с закрытым исходным кодом пользователь должен иметь возможность заменить часть кода lgpl. Самый простой и на сегодняшний день самый распространенный способ сделать это, чтобы положить все LGPL код в dll, а затем пользователь может заменить DLL, если они выбирают.

Вы также можете использовать любые технические средства, которые ваш язык позволяет достичь той же цели. Вы можете распространять объектные файлы, а затем пользователь может перепривязать, как указал другой комментатор, но я никогда не видел, чтобы это делалось на практике.

Не имеет значения, является ли ваш продукт бесплатным или платным. Можно продавать продукты GPL/LGPL.

-121--2885047-

Для частоты дискретизации > 11025 Гц необходимо выполнить понижающую выборку, что является двухэтапным процессом. Сначала требуется фильтр нижних частот, чтобы удовлетворить критерию Найквиста, а затем можно прореживать, например, для данных частоты дискретизации 44,1 кГц потребуется фильтр нижних частот с частотой отсечения 5,5 кГц, а затем можно выбросить 3 из каждых 4 выборок для коэффициента понижающей дискретизации 4:1. Вам понадобится другой фильтр для каждого коэффициента понижающей дискретизации, который вы хотите поддерживать.

-121--3632104-

Две мысли:

  1. Вы должны убедиться, что вы случайно не включаете время JIT в свои тесты - это может добавить значительное количество времени к результату. Необходимо выполнить два прогона в одном и том же выполнении и отменить первый прогон.

  2. Вы должны убедиться, что вы не работаете под отладчиком - это может резко изменить результаты производительности.

Кроме того, любые различия в производительности, которые вы видите, вполне могут быть результатом различия в производительности между хэш-таблицей и деревом. Древовидная структура обычно имеет производительность O (n * log (n)) в среднем для поиска. Сбалансированное дерево может уменьшить это до O (lon (n)). Хэш-таблицы, между тем, могут приближаться к O (1) времени для поиска, когда предотвращаются хеш-коллизии.

Я бы также предположил, что класс .NET Dictionary очень оптимизирован, так как это структура данных «хлеб-масло» для такого количества различных вещей в .NET. Кроме того, общий словарь < > может избежать бокса, и поэтому вы можете видеть некоторые отличия производительности от этого.

4
ответ дан 5 December 2019 в 21:18
поделиться

Нет, если программа является закрытым исходным кодом и требуется установить связь с LGPL-версией Qt, необходимо использовать динамическую связь. Если вы хотите статически связать, то вы должны купить лицензию на Qt.

Для использования кода LGPL в проекте с закрытым исходным кодом пользователь должен иметь возможность заменить часть кода lgpl. Самый простой и на сегодняшний день самый распространенный способ сделать это, чтобы положить все LGPL код в dll, а затем пользователь может заменить DLL, если они выбирают.

Вы также можете использовать любые технические средства, которые ваш язык позволяет достичь той же цели. Вы можете распространять объектные файлы, а затем пользователь может перепривязать, как указал другой комментатор, но я никогда не видел, чтобы это делалось на практике.

Не имеет значения, является ли ваш продукт бесплатным или платным. Можно продавать продукты GPL/LGPL.

-121--2885047-

Для частоты дискретизации > 11025 Гц необходимо выполнить понижающую выборку, что является двухэтапным процессом. Сначала требуется фильтр нижних частот, чтобы удовлетворить критерию Найквиста, а затем можно прореживать, например, для данных частоты дискретизации 44,1 кГц потребуется фильтр нижних частот с частотой отсечения 5,5 кГц, а затем можно выбросить 3 из каждых 4 выборок для коэффициента понижающей дискретизации 4:1. Вам понадобится другой фильтр для каждого коэффициента понижающей дискретизации, который вы хотите поддерживать.

-121--3632104-

Выберите структуру данных и репозиторий в зависимости от данных. При этом нет идеальной структуры данных. Хотя словарь .NET Dictionary <, > хорошо оптимизирован, поскольку часто это хороший выбор, он не является ответом на все проблемы - это было бы 42...

1
ответ дан 5 December 2019 в 21:18
поделиться

Если все, что вам нужно, это поиск, красно-черное дерево не будет вашей лучшей структурой данных. Он обеспечивает сортировку, которая всегда будет медленнее, чем поиск по хеш-таблице. Если вы хотите сравнить .net Dictionary с сопоставимой структурой данных C5, вы должны использовать C5.HashDictionary.

2
ответ дан 5 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: