问题标签 [premature-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
467 浏览

premature-optimization - 在慢速机器上开发是否过早优化?

我们应该在慢箱上开发,因为它迫使我们尽早优化。

Randall Hyde 在The Fallacy of Premature Optimization中指出,围绕 Hoare 的名言有很多误解:

我们应该忘记小的效率,比如大约 97% 的时间:过早优化是万恶之源。

尤其是,尽管如今的机器与 Hoare 时代的机器相比尖叫,但这并不意味着“应该避免优化”。那么,当我尊敬的同事建议我们应该在适度节奏的盒子上发展时,他是否有道理?这个想法是,性能瓶颈在慢速机器上更令人恼火,因此它们很可能会受到关注。

0 投票
2 回答
269 浏览

python - 蟒蛇 | 效率和性能

假设我将通过运行单个脚本将 100 个浮点数保存在一个列表中,很可能需要一些内存来处理。因此,如果此代码每次都作为应用程序的要求执行,则会影响性能,所以我的问题是如何保持效率以获得性能。

样机代码:

谢谢。

0 投票
5 回答
756 浏览

java - 调用一个方法 n 次:我应该使用转换后的 for-each 循环还是传统的 for 循环?

鉴于需要循环到任意 int 值,将值转换为数组并 for-each 数组是更好的编程实践,还是只使用传统的 for 循环?

仅供参考,我正在计算多次投掷 6 面骰子的 5 和 6 结果(“命中”)的数量。我的任意 int 值是 dicePool ,它表示多次抛出的次数。

据我了解,有两种选择:

  1. 将 dicePool 转换为数组并为每个数组:

    /li>
  2. 使用传统的 for 循环:

    /li>

我的观点是选项 1 是笨拙的代码并且涉及不必要的数组创建,即使 for-each 循环比选项 2 中的传统 for 循环更有效。

0 投票
7 回答
7317 浏览

asp.net - count(*) 真的很贵吗?

我有一个页面,其中有 4 个选项卡,显示基于不同表格的 4 个不同报告。

我使用select count(*) from <table>查询获取每个表的行数,并在选项卡上显示每个表中可用的行数。结果,每个页面回发导致count(*)执行 5 个查询(4 个用于获取计数,1 个用于分页)和 1 个用于获取报告内容的查询。

现在我的问题是:count(*)查询真的很贵吗——我应该将行数(至少是那些显示在选项卡上的)保持在页面的视图状态而不是多次查询吗?

COUNT(*) 查询的成本是多少?

0 投票
13 回答
8172 浏览

java - 多次调用getter或调用一次并分配给变量?

假设我的课程为:

在我的 Main 类中,我getAge()多次调用该方法。

所以我想知道是否建议调用这么多次或调用一次并将其分配给某个变量并使用该变量。

哪个最好,为什么?

0 投票
19 回答
2030 浏览

c - 了解 C 真的会伤害你用高级语言编写的代码吗?

这个问题似乎已经解决了,甚至被打死了。聪明的人在这个问题上说过聪明的话。要成为一名真正优秀的程序员,您需要了解 C 语言

还是你?

这周我开悟了两次。第一个让我意识到我的假设并没有超出我在它们背后的知识,并且考虑到在我的机器上运行的软件的复杂性,这几乎不存在。但真正让它回家的是这条 Slashdot 评论

最终结果是,我注意到传统 C“裸机”程序员认为实现更高级别语言的许多天真的方式。他们在他们影响的项目中做出糟糕的“优化”决策,因为他们不知道编译器是如何工作的,也不知道一个好的运行时系统与他们理解的幼稚的宏汇编器模型有多大不同。

然后它击中了我:C 只是另一种抽象,就像所有其他抽象一样。甚至CPU 本身也只是一个抽象!我只是从未见过它破裂,因为我没有测量它的工具。

我很困惑。我的思想是否像 Dijkstra 所说的 BASIC 那样被肢解得无法恢复?我是否生活在过早优化的持续状态中?既然我意识到我对任何事情一无所知,我还有希望吗?有什么要知道的吗?为什么它如此令人着迷,以至于我在过去五年中所写的所有内容都可能根本上是错误的?

总结一下:比 API 文档告诉我的更多有什么价值吗?

编辑:制作CW。当然,这也意味着现在您必须发布解释器/运行时优化的示例,比我们做得更好:)

0 投票
2 回答
263 浏览

asp.net - 我应该将 HttpResponse.End() 用于快速的 web 应用程序吗?

根据msdn, HttpResponse.End()似乎抛出异常。现在我可以选择返回一个值来表示结束线程(它只有 2 个函数深)或者我可以调用 end()。

我知道抛出异常要慢得多(阅读 C#/.NET 测试的评论),所以如果我想要一个快速的 webapp,我应该考虑在不调用它很容易时不调用它吗?

-edit- 我在某些函数和类的构造函数中确实有一个函数调用,以确保用户已登录。所以我在足够多的地方调用 HttpResponse.End() 尽管希望在常规站点使用中它不会经常发生.

0 投票
3 回答
606 浏览

premature-optimization - 我是否正确理解过早优化?

我一直在为我正在编写的应用程序而苦苦挣扎,我想我开始发现我的问题是过早的优化。我完美主义的一面希望在第一次通过时就使一切都变得最佳和完美,但我发现这使设计变得相当复杂。我没有编写可以很好地完成一件简单事情的小型可测试函数,而是倾向于尽可能多地填充功能以提高效率。

例如,我避免多次访问数据库以获取同一条信息,但代价是我的代码变得更加复杂。我的一部分不想担心冗余的数据库调用。这将使编写正确的代码变得更容易,并且无论如何获取的数据量都很小。这样做时,我的另一部分感觉非常肮脏和不干净。:-)

我倾向于多次访问数据库,我认为这是正确的做法。更重要的是我完成了这个项目,我觉得我因为这样的优化而被挂断了。我的问题是:这是避免过早优化时使用的正确策略吗?

0 投票
4 回答
985 浏览

c# - C# 中的计算开销 - 使用 getter/setter 与直接修改数组和转换速度

我本来打算写一篇长篇大论的文章,​​但我会在这里总结一下:

我正在尝试通过 XNA 模仿 NES 的图形老式风格。但是,我的 FPS 很慢,试图修改每帧 65K 像素。如果我只是循环遍历所有 65K 像素并将它们设置为任意颜色,我会得到 64FPS。我为查找应该将哪些颜色放置在哪里而编写的代码,我得到了 1FPS。

我认为这是因为我的面向对象代码。

现在,我将事物分为大约六个类,包括 getter/setter。我猜我至少每帧调用 360K getter,我认为这是很多开销。每个类都包含包含自定义枚举、int、Color 或 Vector2D 字节的非/和-或一维或二维数组。

如果我将所有类组合成一个类,并直接访问每个数组的内容会怎样?代码看起来很乱,并抛弃了面向对象编码的概念,但速度可能会快得多。

我也不担心访问冲突,因为任何获取/设置数组中数据的尝试都将在块中完成。例如,所有对数组的写入都将发生在从它们访问任何数据之前。


至于强制转换,我说我使用的是自定义枚举、int、Color 和 Vector2D、字节。 在 .net Framework、XNA、XBox、C# 中使用和访问哪些数据类型最快?我认为不断铸造可能是这里放缓的原因。

此外,我没有使用数学来确定应该放置哪些索引数据,而是使用预先计算的查找表,因此我不必使用常数乘法、加法、减法、除法每帧。:)

0 投票
3 回答
1252 浏览

java - Java 字节码编译器基准测试

问题 1。什么免费的编译器可以生成最优化的 Java 字节码?

问题 2。哪个免费虚拟机执行 Java 字节码最快(在 64 位多核 CPU 上)?

问题 3。此列表中缺少哪些其他(当前活动的)编译器项目:

问题 4。编译器可以做哪些 JIT 不能(或不能)做的性能改进?

问题 5。最近的一些基准、比较或枪战(第一季度或第二季度)在哪里?

谢谢!