Я работаю над довольно крупным проектом для торговой компании в Филадельфии. Компания использует алгоритмы автоматической торговли, которые обрабатывают потоковые котировки и отправляют котировки для сотен продуктов десятки раз в секунду. Очевидно, что производительность является серьезной проблемой. (Это заставляет меня задаться вопросом, почему мы используем VB.NET, но это совсем другая тема.)
Я относительно новичок в компании и работаю с другим парнем над каким-то кодом, который существует уже некоторое время. Этот код использует объект Microsoft.VisualBasic.Collection для хранения всех продуктов (объектов, представляющих пары ETF или акций и большого количества данных о каждом) и выполняет МНОГО поиска / извлечения из этой коллекции.
Насколько я понимаю, класс Collection устарел, и почти никто больше его не использует. В нашем более свежем коде мы использовали коллекции .NET, такие как List (Of T) и Dictionary (Of TKey, TValue), и, насколько я понимаю, возможно, имеет смысл заменить старую коллекцию Dictionary. Тем не менее, поскольку исходный код довольно существенен, продвижение с этой заменой будет значительным мероприятием; и поэтому мой вопрос заключается в следующем:
Кто-нибудь измерял разницу в производительности между старой коллекцией и словарем .NET? Такое сравнение по какой-то причине неуместно? Конечно, кажется, что все, что мы в настоящее время делаем с Коллекцией, мы могли бы делать со Словарём; в основном я просто хочу знать, имеет ли смысл для нас проходить через код и делать этот переход, или если это по сути будет пустой тратой.
EDIT : Первоначально в вопросе я ссылался на текущую коллекцию, которую мы используем в качестве коллекции VB6. Прочитав первые два ответа, я понимаю, что это более точно Microsoft.VisualBasic.Collection, который представляется классом, представленным для совместимости между VB6 и VB.NET. Я думаю, что вопрос все еще остается в силе.
Основываясь на первой ссылке, приведенной в ответе Кеннета Кохрана, я убежден, что словарь действительно лучше подходит для наших целей, чем коллекция, так как он лучше справляется с извлечением элементов по ключу и выполнением циклов «Для каждого» по несколько миллисекунд на 10000 пробежек. В нашей компании это реалистичный сценарий; в коде много мест с такими утверждениями:
Dim ETF as ETFdetails = ETFcoll(sym)
И, как я уже сказал, эти строки выполняются для сотен продуктов, много раз в секунду. Имея это в виду, я склонен думать, что мы действительно должны пойти дальше и внести изменения, а затем измерить любую разницу в производительности. Я ожидаю, что мы увидим хотя бы небольшое, но заметное улучшение.
Что-то явно не так с тем, что я только что сказал? Если это так, укажите это!