在 vb.net 中选择 Case vs Datatable.findrow 性能

Posted

技术标签:

【中文标题】在 vb.net 中选择 Case vs Datatable.findrow 性能【英文标题】:Select Case vs Datatable.findrow performance in vb.net 【发布时间】:2015-03-29 00:50:43 【问题描述】:

我有一个经常被引用的 vb.net 函数,它有一个带有 900 个单独案例值的选择案例。它是按字母顺序排列的静态名称列表。如果我选择使用键列创建表并使用数据表 find-row 查找值,是否有人有任何提高性能的经验?

创建 select case 语句既简单又简洁,但是是否存在理论上数量的 select case 选项,其中使用此类代码会适得其反,应该采用更好的选项?

编辑更多信息

选择语句是根据电子表格公式创建的,因此不涉及输入。问题是 select 语句打开了许多变量,因此案例名称“Michael”有 surname = “blah”,middle name = “blah”,address = “blah”......,DOB 和一些其他。它全是静态的,而且很容易维护,这是我在写它的时候能做的。我现在知道得更多,所以我正在考虑改进这个程序。我试图确定的是我是否可以通过更改代码获得更好的性能以及是否值得。

【问题讨论】:

想想包含数百个案例的 Select Case 语句几乎会导致身体疼痛。这正是字典的用途。 如果你能在你的问题中添加一些代码来向我们展示一些案例陈述的样子,那就太棒了。 【参考方案1】:

使用Dictionary,它专门用于存储键/值对,并针对查找进行了优化。如果您已经在应用程序中使用数据表,那么创建数据表才有意义,以避免保留额外数据结构的维护开销。否则引入新概念只会使事情复杂化,难以维护。

【讨论】:

【参考方案2】:

我无法给您一个实际的基准,但请考虑一下:如果您有一个包含有序值列表的表,则搜索随机值平均只需搜索一半列表。这个搜索的代码只是一个简单的循环,对于一个普通的列表来说性能非常好。列表越长,您从更复杂的算法中获得的好处就越多。

如果您使用 select-case,编译器可能会生成有效的代码,也可能不会。没有测试(或对编译器有深入的了解),没有很好的方法来回答您的问题,但是测试这应该不难。

恕我直言,对于 900 个案例的列表,我会使用字母表和二进制搜索 (http://en.wikipedia.org/wiki/Binary_search_algorithm)。您的代码也会看起来更好。

【讨论】:

以上是关于在 vb.net 中选择 Case vs Datatable.findrow 性能的主要内容,如果未能解决你的问题,请参考以下文章

选择列表框选项时将行添加到 Data GridView VB.net

VB.NET 将 Select Case 语句堆叠在一起,就像在 Switch C#/Java 中一样

VB.NET 2008 怎么给软件打包?能不能做成一个exe文件?

在VB.NET中(VS.net),怎样指定透明颜色,让图片透明。

VB.NET如何更改保存程序的文件夹名?

如何在选择案例语句中实现枚举