什么是代码优化?

时间:2009-02-12 06:47:14

标签: c# optimization

当说这段代码需要一些优化,或者可能是一些如何优化时,这是什么意思?哪种代码需要优化?如何对c#中的代码进行优化?有什么好处?

7 个答案:

答案 0 :(得分:15)

优化是一个非常广泛的术语。通常,它意味着修改系统以使其某些方面更有效地工作或使用更少的资源或更健壮。例如,可以优化计算机程序,以便它可以更快地执行或使用更少的内存或磁盘存储,或者在UI方面更具响应性。

虽然“优化”与“最优”具有相同的根,但优化过程并不能产生完全最优的系统:总是存在权衡,因此只有最感兴趣的属性才会被优化。

请记住:

  

程序优化的第一条规则:不要这样做。程序优化的第二条规则(仅限专家!):不要这样做。 (Michael A. Jackson

答案 1 :(得分:5)

Optimization是修改系统以使其某些方面更有效地工作或使用更少资源的过程。

在您的情况下主要指2个级别:

  

设计水平

     

在最高级别,可以优化设计以充分利用可用资源。这种设计的实现将受益于高效算法的良好选择,并且这些算法的实现将受益于编写高质量的代码。系统的架构设计压倒性地影响其性能。算法的选择比任何其他设计项目更能影响效率。然而,在某些情况下,优化依赖于使用更高级的算法,利用特殊情况和特殊技巧并执行复杂的权衡;因此,一个完全优化的程序有时,如果评论不充分,对于经验不足的程序员来说更难以理解,因此可能包含比未经优化的版本更多的错误。

     

源代码级别

     

避免质量错误编码还可以避免明显的减速,从而提高性能。然而,在那之后,一些优化可能会降低可维护性;一些,但不是所有这些都可以通过优化编译器来执行。例如,通常需要使用更多的间接来简化或改进软件,但是间接需要成本。

答案 2 :(得分:3)

代码优化使代码运行得更快。有两种主要方法:

1)将更多工作压缩到更少的周期。弄清楚代码在哪里进行额外的复制,或者在紧密循环中是否存在分支。这是小优化。

2)让您的算法更好地扩展。你可能听说过“大O”符号。这使得使用大量数据集的算法降低得更快。

例如,如果您天真地在电话簿中搜索姓名,您将从第1页开始阅读所有姓名,直到找到您要查找的名称。这将采用按电话簿中的名称数量缩放的许多指令。我们称之为O(n)。现在想想你如何真正搜索电话簿。你打开到中间的某个地方,看看你要找的名字在哪一侧。这称为二进制搜索,并以名称数的对数进行缩放。我们称之为O(logn)。它快得多。

记住优化的第一条规则:首先测量。许多人已经花了很多年时间来优化那些运行不多的代码。

答案 3 :(得分:3)

在进行代码优化时,您会对代码采用指标并尝试提高效率。该指标通常指的是稀缺资源。

以下是常见指标

  • 执行速度(通常是优化时首先想到的)
  • 内存消耗
  • 可执行文件大小(在嵌入式系统上可能很重要)
  • 数据库访问
  • 远程服务访问(减少聊天,缓存......)
  • 代码的简单性,可读性和可维护性

优化后代码应该给出相同的结果。

问题是你必须做出选择。执行速度通常伴随着更多的内存消耗......

您还应考虑全球优化。当你花费1000毫秒等待网络服务时,在循环中获得10毫秒的增益是完全没用的。

答案 4 :(得分:1)

为了增加Anton Gogolev的答案,当一段代码需要优化时,这是因为不满足特定的性能要求。我们开发满足用户需求的程序,对吧?大多数程序员倾向于主要考虑功能需求,即程序的功能,但用户也会有性能要求,提供的资源成本(网络带宽,CPU周期,内存,磁盘空间等等)是多少?功能。优化是更改一段代码以满足特定性能要求的过程。恕我直言,这应该在设计时发生,但你有时会写一段代码只是为了发现它表现不佳。要优化代码,首先必须找出您使用的资源。如果是CPU周期或内存,则分析器可能会有所帮助。如果是网络带宽,这是目前非常常见的,你需要进行一些负载测试和通信分析。

我的建议是在编写代码之前始终了解您当前和可能的未来性能要求,并在设计阶段进行优化。后期优化既昂贵又困难,而且常常会失败或导致代码难看。

答案 5 :(得分:1)

优化有两个主要目的:

  • 让您的软件使用更少的资源,例如,运行更快,更小,使用更少的RAM,更少的硬盘空间,无论是在运行时还是在存储文档时,更少的网络访问,...

  • 通过重构使您的软件更易于维护。

只要没有引发相关问题,就不需要进行优化:调优优化代码比优化正确代码要困难得多。

答案 6 :(得分:-3)

例如,代码可能是一个重复的代码块,可能/应该放入一个方法,你可能正在使用不推荐的方法/类,可能有更简单的方法来执行代码是什么这样做,可能会有一些清理工作(例如删除硬编码)等...