问题标签 [overhead-minimization]

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 投票
6 回答
13468 浏览

objective-c - 如何为 Objective-C 协议提供默认实现?

我想指定一个带有可选例程的 Objective-C 协议。当例程不是由符合协议的类实现时,我想使用默认实现来代替它。协议本身是否有一个地方可以定义这个默认实现?如果不是,那么减少到处复制和粘贴此默认实现的最佳做法是什么?

0 投票
2 回答
8213 浏览

optimization - 关于开销的 HTTP 与 Websockets

我正在两端使用 node.js 构建文件同步程序(与 Dropbox 不同)。我需要有成千上万的客户同时请求数据。

这是我目前的系统:

  • 服务器通过 websocket 向客户端推送通知(文件已更新)
  • 客户端将下载排队并在空闲时发出 HTTP 请求

我将以压缩块的形式提供数据,例如每个 50 MB,因此 HTTP 请求开销(标头)可以忽略不计。

如果我使用 websockets 进行请求推送通知,会有:

  • 显着的整体速度提升?(减少延迟、身份验证等)
  • 服务器上保持连接打开的额外开销?
  • 推送二进制数据的问题?

我认为我需要通过专用的 websocket 发送通知,因为我不希望它们在下载时在服务器上排队(大量开销)。

注意:只要客户端的系统处于开启状态,这些 websocket 将长期打开。

编辑:我将在不同端口上的不同 http 服务器上使用 websocket,以便将它们移动到不同的 CPU 内核。我可能会打开数千个(如果不是数十万个)并发 websockets...

0 投票
5 回答
312 浏览

c# - 加密项目:需要有关如何消除方法开销的建议

我正在寻求建议。我开发了自己的加密算法,因为我喜欢它并且我可以。现在,我正在尝试一个新的想法。

我的想法涉及将我的算法合并成一个更大的算法。例如,您调用X.Encrypt()然后它使用A.Encrypt(),B.Encrypt()C.Encrypt()。当您执行这种操作时,每个A,一个字节BC方法调用的方法开销成为杀手。从几毫秒到几分钟。那么,有什么问题吗?

我只是在寻找可能减轻问题的代码设计技巧和窍门。

提前谢谢。

更新

问题的代码示例:

我知道这个问题是如何调用它所固有的。我的目标是改变我的工作方式。我知道在 Transform 方法中可以改进。快速运行大约需要 24 秒,而慢速运行需要几分钟。显然,方法的开销,不需要分析器:)

我确实有一个想法我要尝试。我正在考虑使用“运行模式”,而不是在 Transform 方法之外循环,而是更改它在每个方法中的运行方式以满足我的需要。因此,我可以在 Transform 方法中并作为批处理执行每隔一个字节的加密。我相信这将消除我得到的开销。

最终更新(解决了我自己的问题,仍然对想法持开放态度!)

在 Transform 方法中增加循环速率已经奏效!

我所做的是以下,它似乎运作良好:

在我的工作虚拟机上运行 100MB 大约需要 12 秒。感谢所有贡献的人!这是一种综合反应,帮助我以这种方式尝试。我非常感谢你们!

这只是目前的概念证明。它正在朝着更大的方向发展!:)

0 投票
3 回答
112 浏览

mysql - MySQL 数据库结构决策

我正在尝试在为有关用户的所有可能数据提供 1 个巨大的表之间做出决定,其中很多不会适用于每个用户,然后为用户可以拥有多个实例的数据创建一个单独的表(例如,以前的工作)与将每个用户的数据分布在多个表之间。

第一种方式更加精简,但我觉得它会使用大量不必要的开销,而第二种方式的结果更容易使用,但会导致大量额外的数据库查询。

0 投票
1 回答
578 浏览

multithreading - 我怎样才能使全局缓存线程安全

我的应用程序曾经是单线程的,但现在为了提高性能,我们需要使其成为多线程。

我们在以下架构中有 Lists 和 ListItems:

我们更喜欢列表的组合,而不是继承。

在 ADD() 方法中执行以下操作:

正如我所说,这些对象用于在运行时记录缓存数据,但每次我们需要在其中读取/写入对象时,我们必须:

我不能改变太多的架构,因为有无数的类继承自它。
当我运行这些进程时,处理器图形中有很多尖峰,也有很多停机时间。
该系统由delphi 6编译器编译而成。
关键会话已在单元初始化时创建。

还有另一种方法吗?
我可以以某种方式至少不锁定读数吗?

另外,我必须保证完整性,不允许使用相同密钥的 2 个对象。

0 投票
1 回答
1219 浏览

overhead - 从命令行运行 Julia 的开销

我最近发现了 Julia,我今天从源代码编译了它,从那以后一直在玩它。我有这个非常简单的脚本,我在其中计算两个随机矩阵的乘法

julia_matmul.jl

如果我从 Julia 交互式会话中运行此脚本两次,那么第二次运行将比第一次快得多。但是,如果我从终端运行脚本两次,我只会得到最慢的结果。

这是我的结果:

开销约为 0.3 秒,虽然这非常小,但它可能会破坏短脚本的时间。所以我的问题是:这 ~0.3 秒的开销来自哪里,我怎样才能摆脱它(尤其是在不使用交互式会话时)?

0 投票
1 回答
1359 浏览

opencl - 测量和最小化 OpenCL 开销

我有一个 pyopencl 程序,计算时间很长(每次运行约 3-5 小时)。我有几个内核在循环中一一启动。所以我有这样的事情:

我测量了时间,得到了以下结果:

  1. 系统时间为4:30小时(通过linuxtime命令测量)
  2. 纯opencl基于事件的计时是3:30小时(加载+计算+存储)

我想知道:

  1. OpenCL 程序的最小开销有多大?在我的情况下,它是 35%
  2. 我应该相信基于事件的计时吗?
  3. 启用分析是否会为整个程序执行时间增加一些重要时间?

我知道开销取决于程序,而且我知道 python 不如纯 C 或 CPP 快。但我相信,当我将所有繁重的计算转移到 OpenCL 内核时,我的损失不会超过 5-7%。如果我错了,请纠正我。

PS AMD OpenCL、AMD GPU

0 投票
2 回答
3510 浏览

python - 减少python中的函数调用开销

我开发了一个应用程序,它模拟N个在网格中移动的机器人,它试图在有限的步骤中最大化访问的网格单元的数量,在目标点相遇。一切正常,但速度太慢了。目前是python+numpy+mathplotlib。

最大的机器人可以有一个 100 的软限制(如果它可以变得更高,那就太好了)。

为此,我执行以下简化操作:

机器人是一个 1x2 numpy 数组(x 和 y 坐标)。

这里的代理决定做什么。由于我需要即时切换战术和策略,我无法改变这个逻辑。

代理计算一个接一个地更新机器人。

cProfiling 它返回以下. 提取顶部

我为机器人实现了不同的环境,最重要的是squaregird。每个环境都有自己的距离函数,因为我打算使用不同的度量,即曼哈顿/出租车和欧几里得。我将距离函数提取到自己的distance.py文件中,因为我多次使用它。

可以看到taxcab_distance被调用了很多,因为agent需要评估一个机器人四个邻居和它自己到一个目标点的距离,看看下一个位置是否仍然可以到达目标,并最大化与所有其他机器人的距离作为一个优化启发式。

该功能没有做任何花哨的事情,只是

我知道 python 有相当高的函数调用开销,我认为这会影响性能。{ numpy.core.multiarray.array }忽略,我想我知道我在那里做错了什么。

距离呼叫链:代理 -> environment.distance -> taxcab_distance

问题是,如何减少调用函数的开销?我强烈考虑使用 pythons c 扩展性,cython,更具体。它会起作用吗?这么慢还有其他原因吗?

0 投票
1 回答
2040 浏览

zip - 我们如何估计压缩文件的“开销”?

例如,假设我们压缩一个7字节大小的.txt文件。压缩并转换为.zip文件后,大小为190字节。

有没有办法估计或计算“开销”的近似大小?

什么因素会影响开销大小?

Zlib计算开销:他们说:“……只有扩展是每 16 KB 块 5 个字节的开销(约 0.03%),加上整个流的 6 个字节的一次性开销。”</p>

我只是把这个网站告诉它可以估计“开销”大小。

注意开销是添加到数据压缩版本中的一些额外数据。

0 投票
1 回答
350 浏览

performance - 套接字服务器端开销

与在服务器上保持套接字打开相关的开销是多少?

假设您有数百万个像 facebook 这样的并发连接,与 HTTP 请求相比,套接字会增加太多开销吗?我知道套接字会大量减少网络开销(因为头),但是套接字会是更好的选择吗?如果您不实时更新客户端,但仍向客户端发送批量信息(每隔几秒或客户端请求时),这是在可扩展性、性能和服务器方面为数百万用户提供服务的更好选择侧头顶?(您是否必须使用套接字或 http 进行更多/更快的扩展?)