问题标签 [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 投票
7 回答
10657 浏览

c - 为什么 GCC 不优化结构?

系统要求某些原语与内存中的某些点对齐(整数到 4 的倍数的字节,短到 2 的倍数的字节等)。当然,这些可以优化为在填充中浪费最少的空间。

我的问题是为什么 GCC 不自动执行此操作?是否缺少更明显的启发式(从最大尺寸要求到最小尺寸的顺序变量)?某些代码是否依赖于其结构的物理顺序(这是个好主意)?

我只是问,因为 GCC 在很多方面都经过了超级优化,但在这方面却没有,而且我认为一定有一些相对酷的解释(我没有注意到)。

0 投票
8 回答
2210 浏览

php - PHP中的延迟函数定义 - 可能吗?

在 JavaScript 中,您可以使用延迟函数定义来优化对函数的第 2 次 - 第 N 次调用,方法是仅在第一次调用函数时执行昂贵的一次性操作。

我想在 PHP 5 中做同样的事情,但是不允许重新定义函数,也不允许重载函数。

实际上,我想要做的是如下所示,仅进行了优化,因此第 2 次 - 第 N 次调用(比如 25-100)不需要重新检查它们是否是第一次调用。

PS 我曾考虑使用 include_once() 或 require_once() 作为函数中的第一行来只执行一次外部代码,但我听说这些也很昂贵。

有任何想法吗?还是有更好的方法来解决这个问题?

0 投票
3 回答
12638 浏览

optimization - 是否应该在 Lucene 中的增量索引之后优化索引?

我们每 7 天在 Lucene 索引上运行一次完整的重新索引(即从头开始创建索引),每 2 小时左右运行一次增量索引。我们的索引有大约 700,000 个文档,完整索引大约需要 17 个小时(这不是问题)。

当我们做增量索引时,我们只索引在过去两个小时内发生变化的内容,所以它花费的时间要少得多——大约半小时。但是,我们注意到其中很多时间(可能是 10 分钟)都花在了运行 IndexWriter.optimize() 方法上。

LuceneFAQ提到

IndexWriter 类支持压缩索引数据库并加快查询速度的 optimize() 方法。您可能希望在对文档集执行完整索引之后或在索引的增量更新之后使用此方法。如果您的增量更新频繁添加文档,您希望只偶尔执行一次优化以避免优化的额外开销。

...但这似乎没有对“经常”的含义给出任何定义。优化是 CPU 密集型和 IO 密集型的,所以如果我们可以侥幸逃脱,我们宁愿不这样做。在未优化的索引上运行查询的影响有多大(我在考虑特别是在完全重新索引后的查询性能方面,与在 20 个增量索引后相比,例如,50,000 个文档已更改)?我们应该在每个增量索引之后进行优化,还是性能损失不值得?

0 投票
18 回答
76350 浏览

sql - 优化在 Oracle 上运行缓慢而在 SQL Server 上快速运行的 SELECT 查询

我正在尝试在 Oracle 中运行以下 SQL 语句,它需要很长时间才能运行:

如果我只运行 IN 子句中的子部分,它在 Oracle 中运行得非常快,即

为什么整个语句在 Oracle 中需要这么长时间?在 SQL Server 中,整个语句运行得很快。

或者,我应该使用更简单/不同/更好的 SQL 语句吗?

有关该问题的更多详细信息:

  • 每个订单由许多任务组成
  • 将分配每个订单(其中一个或多个任务将设置engineer1 和engineer2)或者可以取消分配订单(其所有任务的engineer 字段都具有空值)
  • 我正在尝试查找所有未分配的 orderID。

以防万一,表中有大约 120k 行,每个订单有 3 个任务,因此大约有 40k 个不同的订单。

对答案的回应:

  • 我更喜欢在 SQL Server 和 Oracle 中都可以使用的 SQL 语句。
  • 任务仅在 orderID 和 taskID 上有一个索引。
  • 我尝试了语句的 NOT EXISTS 版本,但在我取消它之前它运行了 3 多分钟。也许需要一个 JOIN 版本的语句?
  • 还有一个带有 orderID 列的“订单”表。但我试图通过不将其包含在原始 SQL 语句中来简化问题。

我猜在原始 SQL 语句中,子查询每次都会为 SQL 语句第一部分中的每一行运行 - 即使它是静态的并且只需要运行一次?

执行

使我原来的 SQL 语句执行得更快。

尽管我仍然很好奇为什么我必须这样做,以及是否/何时需要再次运行它?

统计信息为 Oracle 的基于成本的优化器提供了确定不同执行计划效率所需的信息:例如,表中的行数、行的平均宽度、每列的最高和最低值、每列不同值的数量,索引的聚类因子等。

在一个小型数据库中,您可以设置一个工作来每天晚上收集统计数据,然后不用管它。其实这是10g下的默认值。对于较大的实现,您通常必须权衡执行计划的稳定性与数据变化的方式,这是一个棘手的平衡。

Oracle 还有一个称为“动态采样”的功能,用于对表进行采样以确定执行时的相关统计信息。它更常用于数据仓库,其中采样的开销超过了长时间运行查询的潜在性能提升。

0 投票
7 回答
22214 浏览

c# - C# 中的慢树视图

我有一个用 C# 编写的遗留应用程序,它显示了一个非常复杂的树视图,其中包含 10 到 2 万个元素。

过去我遇到过类似的问题(但在 C++ 中),我使用 Win32 API 提供的 OWNERDATA 功能解决了这个问题。

C#中是否有类似的机制?

编辑:计划是优化创建时间和浏览时间。通过 Win32 API 提供的方法在这两种情况下都非常出色,因为它将初始化时间减少到零,并且对元素的请求数量仅限于任何时候可见的元素。乔什:我们实际上已经在按照您的建议做,但我们仍然需要更高的效率。

0 投票
3 回答
20300 浏览

java - 如何减少 JSF 中的 javax.faces.ViewState

减少 JSF 中视图状态隐藏字段大小的最佳方法是什么?我注意到我的视图状态大约是 40k,这会在每个请求和响应(尤其是到达服务器)时下降到客户端并返回到服务器,这对用户来说是一个显着的减慢。

我的环境 JSF 1.2、MyFaces、Tomcat、Tomahawk、RichFaces

0 投票
7 回答
2452 浏览

c++ - 内存占用最少的 STL 实现是什么?

我正在开发一个大量使用 STL 的超大规模计算库。该库正在使用 MSVC2003 构建,并且正在使用其 STL 实现。我正在寻找一种替代的 STL 实现,它可以帮助库降低其内存需求并提高其性能。

目前无法切换到更新版本的 MSVC。

如果可能的话,我希望得到一些关于不基于基准的实际使用情况的反馈。

编辑:为了让它更清楚一点,例如一些 STL 实现(如 STLSoft)正在为字符串连接提出特定的优化;这些可能听起来影响很小,但它们可以带来很大的改进。STLPort 是另一个很好的例子,他们清楚地说明了他们的目标:拥有最快的 STL 实现,有 stdlib++ 等......所有这些都可以是很好的候选者,但我没有时间测试它们,我需要一些社区帮助在那。

0 投票
7 回答
1388 浏览

c++ - 减少大型不熟悉代码库的内存占用

假设您有一个相当大(~2.2 MLOC)、相当老(10 多年前开始)C/C++ 的 Windows 桌面应用程序。大约 10% 的模块是外部的,没有源代码,只有调试符号。

您将如何将应用程序的内存占用减少一半?至少,你会怎么做才能找出内存消耗的地方?

0 投票
6 回答
1314 浏览

c# - C# 编译器错误地优化代码

我有一个在远程 Web 服务器上运行的 ASP.NET 应用程序,我刚开始收到此错误:

我反汇编了 DLL 中的代码,似乎编译器错误地优化了代码。(请注意,Set 是一个实现一组唯一对象的类。它继承自 IEnumerable。)这一行:

编译成这一行:

CalendarModule 类是一个完全不相关的类!!以前有没有人注意到 .NET 错误地编译了这样的代码?

更新 #1:这个问题似乎是由 Microsoft 的ILMerge工具引入的。我们目前正在研究如何克服它。

更新 #2:到目前为止,我们找到了两种解决此问题的方法。我们不太了解根本问题是什么,但是这两个都解决了它:

  1. 关闭优化。

  2. 在另一台机器上将程序集与 ILMerge 合并。

所以我们想知道构建机器是否以某种方式错误配置(考虑到我们已经使用该机器构建版本已经一年多了,这很奇怪)或者是否是其他问题。

0 投票
4 回答
11817 浏览

performance - GPGPU(通用GPU)开发的优缺点是什么?

我想知道在 GPGPU 开发中帮助您的关键是什么,当然还有哪些限制是您无法接受的。

我想到了:

  • 关键优势:这些东西的原始力量
  • 关键约束:内存模型

你有什么看法?