C# 编写应用程序时,先完成函数,然后优化?

C# 编写应用程序时,先完成函数,然后优化?,c#,.net,performance,C#,.net,Performance,Donald Knuth说过“过早优化是万恶之源”,我逐渐相信这句话 所以我可以说,在编写应用程序时,我们应该专注于完成功能,,而不考虑性能问题,直到我们无法承受低性能为止 我担心,如果我多次使用错误的模式,这会降低应用程序的速度,因此修复问题可能会花费大量时间。在广泛使用模式之前,我应该测试它的性能吗 我提到的模式可能是使用Linq或for循环,使用Delegate.BeginInvoke,并行。for或任务,disposeIDisposable或忽略它,等等 欢迎任何参考资料。我同意Knut

Donald Knuth说过“过早优化是万恶之源”,我逐渐相信这句话

所以我可以说,在编写应用程序时,我们应该专注于完成功能,,而不考虑性能问题,直到我们无法承受低性能为止

我担心,如果我多次使用错误的模式,这会降低应用程序的速度,因此修复问题可能会花费大量时间。在广泛使用模式之前,我应该测试它的性能吗

我提到的模式可能是使用Linq或for循环,使用
Delegate.BeginInvoke
并行。for
任务
,dispose
IDisposable
或忽略它,等等


欢迎任何参考资料。

我同意Knuth关于过早优化的引述精神,因为它会导致代码在开发早期变得过于复杂和笨拙,影响代码质量和完成项目所需的时间

我对你的帖子有两个顾虑:

您应该了解您的函数/算法在理论上是否可以扩展/执行以满足您的需求(例如,解决方案的O复杂性->)

您提到的模式实际上是具体的实现项,其中只有一些与性能相关,例如

  • Parallel.For/Task-这些对于在多核系统上获得性能非常有用
  • IDisposable-这是与资源管理相关的,而不是必须避免的
  • Linq与for循环-这可能是一个点优化,但您需要对您的用例进行基准测试/评估,以确定哪一个最适合您(例如,在某些情况下,为了并行性,Linq可以移动到PLinq)
  • Delegate.BeginInvoke-线程同步的非可选组件

切勿在不考虑性能的情况下编码。
在代码变得更复杂(例如并行)之前的性能代码。
但对于C#5.0,即使是并行也不复杂。
如果您有一些您认为可能需要优化的呼叫,请为此进行设计。
设计代码,使优化不会改变方法的接口

有速度、内存、并发性(如果是服务器应用程序)、可靠性、安全性和支持。
干净的代码通常是最好的代码

在你知道自己有性能问题之前,不要发疯,但也不要马虎

在回答关于SO的另一个问题时,我告诉那个人他们不需要DataTable,DataReader会更快,内存更少。他们的反应是,它仍然以1/2秒的速度运行,我不在乎。对我来说,这是草率的代码


@JonhSanders我不同意“在代码变得更复杂之前提高性能的代码”会导致错误或不完整。对我来说,性能编码与优化不同。第一次传递任何东西,除了为了性能而编写的代码——没有什么异国情调,只有最佳实践。在我看到可能需要返回并优化的潜在热点的地方,我在写作时考虑了优化。另外,我同意结束这个问题。

试着发帖,不要把这句话误解为错误代码的免费通行证!一般来说:让它工作,然后让它快速。如果你试图使它快速运行,你常常会得到一些不起作用的结果。你觉得有一些不起作用或不完整的快速代码对你有帮助吗?@JohnSaunders参见updateAgree:首先,让它工作,然后让它足够快地工作。