As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




已关闭8年。




如今,优化似乎是一门失传的艺术。难道没有时间所有程序员都从他们的代码中压缩每一盎司的效率吗?在雪地里走五英里时经常这样做吗?

本着重拾迷失的精神的精神,您知道通过简单(或复杂)更改来优化C#/。NET代码有哪些技巧?由于涉及的范围如此广泛,这取决于要完成的任务,因此有助于提供提示的上下文。例如:
  • 将多个字符串连接在一起时,请使用StringBuilder代替。请参阅底部的链接以获取有关此方面的警告。
  • 使用string.Compare比较两个字符串,而不是像string1.ToLower() == string2.ToLower()一样

  • 到目前为止,似乎普遍存在的共识是关键。这种错误的意思是:测量并不能告诉您问题出在哪里,如果遇到瓶颈,该怎么办。我曾经遇到过字符串串联瓶颈,却不知道该怎么做,因此这些技巧很有用。

    我发布此文章的目的是为常见的瓶颈留出一席之地,以及在遇到瓶颈之前如何避免它们。甚至没有人必须盲目遵循的即插即用代码,而是更多地了解应该至少在某种程度上考虑性能,并且要注意一些常见的陷阱。

    我可以看到,虽然也可能知道技巧为什么有用以及应该在哪里应用,这可能会很有用。对于StringBuilder技巧,我找到了很久以前在here on Jon Skeet's site所做的帮助。

    最佳答案



    曾经有一天,制造显微镜被视为一种艺术。光学原理了解甚少。没有零件的标准化。镜筒,齿轮和镜片必须由熟练的 worker 手工制作。

    如今,显微镜是作为工程学科生产的。物理学的基本原理已广为人知,现成的零件种类繁多,显微镜制造工程师可以就如何最佳地优化仪器以完成设计任务做出明智的选择。

    绩效分析是一件“失落的艺术”,是一件非常非常好的事情。那门艺术被实践为一门艺术。应该对其进行优化:通过认真应用扎实的工程原理可以解决工程问题。

    多年来,我曾被问过数十次有关“提示和技巧”列表的信息,人们可以用来优化其vbscript/jscript/ Activity 服务器页面/VB/C#代码。我一直拒绝。 强调“技巧”是提高性能的错误方法。 这种方式导致难以理解,难以推理,难以维护的代码通常不会比相应的直接代码快得多。

    处理性能的正确方法是像处理其他任何问题一样将其作为工程问题处理:

  • 设置有意义的,可衡量的,以客户为中心的目标。
  • 构建测试套件,以在现实但可控制且可重复的条件下针对这些目标测试您的性能。
  • 如果这些套件表明您没有达到目标,请使用探查器之类的工具找出原因。
  • 优化探查器识别为性能最差的子系统的功能。对每个更改进行概要分析,以便您清楚地了解每个更改对性能的影响。
  • 重复执行以下操作,直到发生以下三种情况之一:(1)您达到目标并发布了软件,(2)您将目标向下修订为可以实现的目标,或者(3)由于无法达到目标而取消了项目。

  • 这与您解决任何其他工程问题一样,例如添加功能-为功能设置以客户为中心的目标,跟踪实现可靠实现的进度,通过仔细的调试分析找到问题后加以修复,不断进行迭代直到您发货或失败。 性能是一项功能。

    在复杂的现代系统上进行性能分析需要纪律,并专注于扎实的工程原理,而不是一full而就的技巧。我从来没有通过应用技巧来解决现实世界中的性能问题。

    关于c# - 优化C#/。NET程序的技巧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2473666/

    10-09 04:13