.net - Microsoft.VisualBasic.Collection 和 .NET System.Collections.Generic.Dictionary(Of TKey, TValue

我正在为费城的一家贸易公司做一个相当大的项目。该公司利用自动交易算法处理流式报价并每秒数十次发送数百种产品的报价。显然,性能是一个重要的问题。 (这让我怀疑为什么我们使用 VB.NET,但这完全是另一个话题。)

我对公司相对较新,正在与另一个人一起研究一些已经存在了一段时间的代码。此代码利用 Microsoft.VisualBasic.Collection 对象来存储所有产品(代表成对的 ETF 或股票的对象以及关于每个产品的大量数据),并从该集合中进行大量搜索/检索。

据我了解,Collection 类已被弃用,几乎没有人再使用它了。在我们最近的代码中,我们一直在使用 .NET 集合,例如 List(Of T) 和 Dictionary(Of TKey, TValue),据我所知,用字典替换旧的集合可能是有意义的。但是,由于源代码相当庞大,因此进行此替换将是一项重大任务;所以我的问题是这样的:

有没有人实际测量过旧 Collection 和 .NET Dictionary 之间的性能差异?无论出于何种原因,这样的比较是否不合适?看起来我们目前用 Collection 做的所有事情我们都可以用 Dictionary 做;基本上,我只是想知道我们通过代码并进行这种转换是否有意义,或者这样做是否本质上是一种浪费。

编辑 :最初在问题中我提到了我们用作 VB6 集合的当前集合。阅读前两个答案后,我意识到它更准确地说是 Microsoft.VisualBasic.Collection,它似乎是为 VB6 和 VB.NET 之间的兼容性而引入的类。我认为这个问题仍然成立。

基于 Kenneth Cochran 的回答中提供的第一个链接,我相信字典确实比集合更适合我们的目的,因为它在通过键检索项目和运行“For Each”循环几毫秒方面表现更好10,000 次运行。在我们公司,这是一个现实的场景;代码中有很多地方带有如下语句:

Dim ETF as ETFdetails = ETFcoll(sym)

正如我所说,这些生产线每秒在数百种产品上执行多次。考虑到这一点,我倾向于认为我们真的应该继续进行更改,然后衡量任何性能差异。我预计我们至少会看到轻微但明显的改善。

我刚才说的有什么明显的错误吗?如果有,请指出!

最佳答案

如果您使用的是 VB.NET,则您没有使用 VB6 集合。 VB.NET 集合在功能上等同于 VB6 集合,但它们并不相同。 Francesco Balena’s Blog - Speed up your VB.NET collections比较了各种 .NET 集合类型与 VB6 集合,包括 VB.NET 集合。每种集合类型都有其优点和缺点(否则我们为什么会有这么多集合类型可供选择)。有些更快,插入以搜索为代价,反之亦然。有些在小集合时更快,而另一些在大集合时更快。您的选择应取决于对您而言最重要的性能属性。

这是我偶然发现的一张表,它给出了标准 .NET 集合类型的相对性能。注意不包括 VB.NET 集合:
.NET Buzz Forum - C# collection classes performance

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文地址:https://stackoverflow.com/questions/855761/                                                                            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值