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

java - 在 Java 中增加 Map 值的最有效方法

我希望这个问题对于这个论坛来说不是太基本,但我们会看到。我想知道如何重构一些代码以获得更好的性能,这些代码正在运行很多次。

假设我正在使用 Map(可能是 HashMap)创建一个词频列表,其中每个键都是一个字符串,其中包含正在计算的单词,值是一个整数,每次找到单词的标记时都会递增。

在 Perl 中,增加这样一个值非常容易:

但是在Java中,它要复杂得多。这是我目前正在这样做的方式:

这当然依赖于较新 Java 版本中的自动装箱功能。我想知道您是否可以提出一种更有效的方法来增加这样的值。避免使用 Collections 框架并改用其他东西是否有很好的性能原因?

更新:我已经对几个答案进行了测试。见下文。

0 投票
9 回答
2278 浏览

c++ - 帮助合并向量的算法

我需要一个非常快速的算法来完成以下任务。我已经实现了几种完成它的算法,但是它们对于我需要的性能来说都太慢了。它应该足够快,以至于算法可以在现代 CPU 上每秒至少运行 100,000 次。它将在 C++ 中实现。

我正在使用跨度/范围,这是一种在一条线上具有起点和终点坐标的结构。

我有两个跨度向量(动态数组),我需要合并它们。一个向量是 src,另一个是 dst。向量按跨度起始坐标排序,跨度在一个向量内不重叠。

src 向量中的 span 必须与 dst 向量中的 span 合并,这样得到的向量仍然是排序的并且没有重叠。IE。如果在合并期间检测到重叠,则将两个跨度合并为一个。(合并两个跨度只是改变结构中的坐标的问题。)

现在,还有一个问题,src 向量中的跨度必须在合并期间“加宽”。这意味着将在 src 中每个跨度的开始坐标添加一个常量,并将另一个(更大的)常量添加到结束坐标。这意味着在 src 跨度扩大后,它们可能会重叠。


到目前为止,我得出的结论是它不能完全就地完成,需要某种临时存储。我认为它应该在线性时间超过 src 和 dst 总和的元素数量。

任何临时存储都可能在算法的多次运行之间共享。

我尝试过的两种太慢的主要方法是:

  1. 将 src 的所有元素附加到 dst,在附加之前扩展每个元素。然后运行就地排序。最后,使用“读”和“写”指针遍历结果向量,读指针在写指针之前运行,在进行时合并跨度。当所有元素都被合并(读指针到达末尾) dst 被截断。

  2. 创建一个临时工作向量。通过重复从 src 或 dst 中选择下一个元素并合并到工作向量中来进行如上所述的简单合并。完成后,将工作向量复制到 dst 并替换它。

第一种方法的问题是排序是 O((m+n)*log(m+n)) 而不是 O(m+n) 并且有一些开销。这也意味着 dst 向量必须增长得比它真正需要的大得多。

第二个主要问题是大量复制并再次分配/释放内存。

如果您认为需要,可以更改用于存储/管理跨度/向量的数据结构。

更新:忘了说数据集有多大。最常见的情况是任一向量中有 4 到 30 个元素,并且 dst 为空或 src 和 dst 中的跨度之间存在大量重叠。

0 投票
3 回答
1897 浏览

sql-server - 如何获得 CPU/内存/等方面的数据库特定性能指标。在 SQL Server 2005 中?

我在一个共享的 SQL Server 2005 集群实例上有几个数据库,我想要性能指标。我有一些进程运行了很长时间,并且怀疑代码效率低下,而不是硬件不足是罪魁祸首。

我想要一些方法来获得这些性能指标,这样我就可以排除数据库硬件是罪魁祸首。

0 投票
15 回答
21462 浏览

c++ - 函数调用的成本是多少?

相比

  • 简单的内存访问
  • 磁盘访问
  • 另一台计算机上的内存访问(在同一网络上)
  • 另一台计算机上的磁盘访问(在同一网络上)

在 Windows 上的 C++ 中。

0 投票
6 回答
26775 浏览

mysql - SQL 查询长度的实际限制(特别是 MySQL)

有很多(可能是冗余的)WHERE 子句的非常非常大的 SQL 查询是不是特别糟糕?

例如,这是我从我的 Web 应用程序中生成的一个查询,所有内容都已关闭,这应该是该程序生成的最大可能查询:

它似乎工作得很好,但它的流量也不是特别高(每天几百次左右),我想知道是否值得努力优化查询以消除冗余等。

0 投票
16 回答
29981 浏览

c++ - STL vectors with uninitialized storage?

I'm writing an inner loop that needs to place structs in contiguous storage. I don't know how many of these structs there will be ahead of time. My problem is that STL's vector initializes its values to 0, so no matter what I do, I incur the cost of the initialization plus the cost of setting the struct's members to their values.

Is there any way to prevent the initialization, or is there an STL-like container out there with resizeable contiguous storage and uninitialized elements?

(I'm certain that this part of the code needs to be optimized, and I'm certain that the initialization is a significant cost.)

Also, see my comments below for a clarification about when the initialization occurs.

SOME CODE:

0 投票
8 回答
74638 浏览

c++ - std::map 插入或 std::map 查找?

假设您要在其中保留现有条目的地图。20% 的时间,您插入的条目是新数据。使用返回的迭代器执行 std::map::find 然后 std::map::insert 是否有优势?或者尝试插入然后根据迭代器是否指示记录已插入或未插入是否更快?

0 投票
23 回答
123018 浏览

c++ - 切换 if-else 语句的优势

switch使用语句与使用if语句进行 30 个枚举的最佳实践是什么,unsigned其中大约 10 个具有预期的操作(目前是相同的操作)。需要考虑性能和空间,但并不重要。我已经抽象了这个片段,所以不要因为命名约定而讨厌我。

switch陈述:

if陈述:

0 投票
2 回答
2539 浏览

wcf - WCF - 在您的服务中抛出 FaultExceptions 的开销

我发布了一个关于使用消息与故障异常在服务之间传达业务规则的问题。

我的印象是通过网络抛出这个异常会带来开销,但考虑到它只是一个被序列化和反序列化的消息,它们实际上是相同的。

但这让我开始考虑抛出一般的异常或更具体地抛出 FaultExceptions。

现在在我的服务范围内,如果我使用

传达一个简单的业务规则,例如“您的帐户尚未激活”,现在这会带来什么开销?它与在 .NET 中引发常规异常的开销相同吗?或者 WCF 服务是否使用故障契约更有效地处理这些问题。

所以在我的用户示例中,这是编写我的服务方法的最佳/首选方式

选项一

选项 b

0 投票
6 回答
5237 浏览

java - 如何为 HTTP servlet 容器选择最大线程数?

我正在开发一个安静的 Web 服务,它在 Jetty 中作为 servlet(使用阻塞 IO)运行。找出最大线程的最佳设置似乎很难。

是否有研究公式可以从其余设置的一些易于测量的特征中确定最大线程数?