Ear*_*rlz 25 c# arrays optimization dictionary
我将创建一个将使用字典查找和插入相当多的项目.这是值得关注的吗?
此外,如果我进行基准测试等并且它确实很糟糕,那么用其他东西替换字典的最佳方法是什么?使用带有"散列"键的数组会更快吗?那会对插入时间有所帮助吗?
另外,我认为我不是微优化,因为这确实是生产服务器上代码的重要组成部分,因此如果需要额外100毫秒才能完成,那么我们将寻找新的方法来处理这个问题.
Joh*_*ers 79
你是微观优化.你甚至还有工作代码吗?请记住,"如果它不起作用,它无效的速度无关紧要." (Mich Ravera)http://www.codingninja.co.uk/best-programmers-quotes/.
你不知道瓶颈会在哪里,而且你已经专注于词典.如果问题出在其他地方怎么办?
PS它实际上是".NET Dictionaries",而不是"C#Dictionaries",因为C#只是使用该框架的几种编程语言之一.
Eri*_*ert 66
您好,我将创建一个将使用字典查找和插入相当多的项目.这是值得关注的吗?
是.预先考虑性能因素总是明智的.
您需要考虑的形式如下:您的关注应该是鼓励您编写切合实际的,以用户为中心的性能规范.应该鼓励您尽早开始编写性能测试并经常运行它们,这样您就可以看到产品的每一次更改如何影响性能.这样,当代码更改导致影响用户的性能变化时,您将立即得到通知.并且它应该鼓励您经常运行配置文件,以便您根据经验测量推断性能,而不是随机猜测和预测.
此外,如果我进行基准测试等并且它确实很糟糕,那么用其他东西替换字典的最佳方法是什么?
最好的方法是构建一个合理的抽象层.如果您有一个表示"插入"和"查找"抽象数据类型的类(或接口),则可以在不更改任何调用者的情况下替换其内部.
请注意,添加抽象层本身会产生性能成本.如果您的分析显示抽象层太昂贵,如果每次调用额外的几纳秒太多,那么您可能不得不摆脱抽象层.同样,这个决定将由现实世界的性能数据驱动.
使用带有"散列"键的数组会更快吗?那会对插入时间有所帮助吗?
无论是你还是读过这篇文章的人都不可能知道哪一个更快,直到你用两种方式写出来然后在现实世界的条件下对它进行基准测试.在"实验室"条件下进行此操作会使您的结果产生偏差; 当GC处于实际内存压力下时,您需要了解其工作原理,等等.你不妨问我们明年肯塔基德比赛中哪匹马会跑得更快.如果我们只是通过观察比赛形式就知道答案,我们都已经变得富有了.在未指定的条件下,您不可能指望任何人知道两个完全假设的,不成文的代码中的哪一个会更快!
Jus*_*tin 10
等一下,看看您的应用程序的性能是否低于预期
如果是,那么使用分析器来确定字典查找是否是问题的根源
如果是,那么使用代表性数据进行一些测试以查看列表的另一个选择是否是更快.
简而言之 - 不,一般来说,在遇到问题之前,您不应该担心实现细节的性能.
我会做一下Dictionary,HashTable(.NET中的HashSet)的基准测试,也许是一个本土的类,看看哪些在你的典型使用条件下效果最好.
通常情况下我会说这很好(在这里插入StackOverflow最喜欢的早泄引用),但如果这是应用程序的核心,Benchmark,Benchmark,Benchmark.
| 归档时间: |
|
| 查看次数: |
10796 次 |
| 最近记录: |