我在C#中使用winforms开发应用程序。在开发过程中,我想使用许多小方法,例如resetPerticularCombo(),因此代码保持尽可能干净。但问题是使3-5行代码的方法可能会导致太多的方法调用,我听说在编译Visual Studio 2008时会使用代码内联来处理这个问题。
我的疑问是,我是否应该依赖此功能并继续使用小帮助方法,或者我应该使用自己内联?
答案 0 :(得分:7)
在证明这是一个问题之前,你不应该担心会有大量的方法调用。这种实际导致问题的可能性很小(IMO),如果它为您提供更易读的代码,那就是最重要的事情。
但测试表现始终是否可以接受。找出代码中的瓶颈在哪里,无论是通过分析还是其他技术,并考虑在最有效的地方进行微优化。
根据我的经验,使用“使用更少的方法”进行微观优化,与更高级别的更改(例如从列表查找到字典查找等)相比,几乎总是没有意义。
答案 1 :(得分:2)
我同意Jon Skeet。
关于企业应用程序我可以告诉您以下内容
我正在领导一个小型开发团队(5位开发人员)。我们的应用程序大约有500k loc。
我们总是试图找到方法应该具有的最特别的关注点。所以我们得到了很多小的和“自我解释”的方法。 因此,我们有许多方法,这从来不会导致问题。
大多数时候瓶颈在于访问SQL Server,文件等资源...... 或者缺乏异步性。
此外,我有一个性能,您可以使用蚂蚁profilder来描述它。
我也喜欢这些我在网上发现的优化“规则”
FirstRuleOfOptimization - 不要。
SecondRuleOfOptimization - 不要...... P
ThirdRuleOfOptimization - ProfileBeforeOptimizing
如果您正在开发一个时间关键软件(图形或驱动程序相关),那么这些东西可以说明问题,但是我不确定.net是否是最好的环境
答案 2 :(得分:0)
很多小例程都很好,正如其他答案已经说过的那样,但请记住考虑重构类似的例程,以便于阅读和维护(而不是专门针对性能)。
如果例程相同,则 resetPerticularCombo()
和resetAnotherCombo()
可能值得转换为resetCombo(PerticularCombo)
和resetCombo(AnotherCombo)
。
使用匿名lambdas,这甚至可以用于合并其他类似的算法:(potentailly bad example,但继续使用OP的代码) ProcessCombo(PerticularCombo, (c)=>c.Reset())
和ProcessCombo(PerticularCombo, (c)=>c.SelectFirst())
< / p>
我是一名VB.NET程序员,这段代码直接输入到SO中,没有任何语法检查。