问题标签 [memory-efficient]

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 投票
1 回答
179 浏览

javascript - javascript 中的内存效率更高的 IIFE 是什么?

我想调用一个匿名的自执行函数,只有当 dom 准备好时,使用内存效率更高的技术。而且,我想使用 window 和 window.jQuery 全局对象的本地范围版本来进行优化(加载本地范围比全局更快)。

那么,这种模式正确吗?

我不确定我是否做错了什么......

提前致谢!

0 投票
2 回答
161 浏览

c - 什么是最小化 RAM 消耗的良好实施实践

我在基于 arm 的 Linux 设备上运行 C 代码,该设备具有非常小的 RAM 空间 (16MB)。我的代码经常被内核杀死(SIGKILL)并显示“内存不足”消息。我用 Valgrind 运行程序,看起来没有内存泄漏。我也使用 gdb 运行代码,但无法识别代码中的任何错误。我将尝试多次优化我的代码。

一般来说,什么是代码的良好实现实践以最大限度地减少内存使用?

  • 一种可能是尽可能多地使用函数(?),但我猜 gcc 已经优化了代码以减少源代码的使用。
  • 避免动态内存分配
  • 还有什么?
0 投票
1 回答
253 浏览

java - 多选项卡地图/平铺级别编辑器(许多 HashMaps/ArrayLists)中的 CPU/内存效率

我从 2008 年开始在一台机器上开发,不幸的是目前无法升级。我真的需要优化我正在构建的这个工具的性能。

我的整个项目相当大,我目前正在创建自己的地图编辑器,以便以后为我的主要项目创建地图。它相当简单,旨在加载、保存和编辑地图拥有的“瓷砖”数组。它基本上是一个 2D 地图编辑器,根据我的需要进行定制。

编辑器预览


当地图加载到编辑器中时,它的 Tileset(一个大的 BufferedImage)被分解为每个单独的 Tile(具有较小的 BufferedImage),加载到 GUI 的右侧成为一大堆带有图标的 JLabel。我使用了各种 Swing LayoutManager 来实现我想要的定位。

在 MapCanvas 区域内,基本上做了同样的事情。每个 Tile,无论是否为空,都有一个带有图标的 JLabel,加载到 Grid 上。我之前曾询问过使用 Swing 组件是否比使用 Java2D 来设计和绘图更有效,并且一致认为这并不重要(老实说,Swing 可能比我写的更好我)。


我相信我的问题源于我互连每个 JLabel 及其图标的方式。

我的目标是减少我必须创建的重复图标的数量,这在理论上应该减少内存使用和 CPU 使用。编辑器中的磁贴交互如下:

  • 如果没有选择要“标记”的图块,则只会在 JLabel 的图标上绘制一个颜色的 alpha 合成,以表示它正在悬停,并且将在 MouseExit 时恢复
  • 如果活动的图章工具上有一个图块,该图块的图像将临时替换 JLabel 的图标以表示它正在悬停,并且将在 MouseExit 时恢复
  • 如果活动图章工具上有一个图块,并且单击了一个 JLabel,则该 JLabel 的图标将“永久”设置为活动图章图块,除非还原
  • 如果启用 Grid Lines 选项,每个 JLabel 的图标将通过 ImageFactory 处理,以使虚线沿着顶部和左侧边缘延伸(形成网格,如图所示)如果缩放级别发生变化,每个JLabel 的preferredSize 设置为可容纳,并且必须在ImageFactory 中调整图标的大小(根据应用的网格线)


将 Map 加载到编辑器后,会创建每个 JLabel,并给出其对应的 BufferedImage(无论是否为空),然后将其放入 Map 的字段 ArrayList 中。设置了 preferredSize 以使 Layout 看起来正确,并将其添加到 MapCanvas(它只是一个 JPanel)。

我创建了各种 ArrayList 和 HashMap 对象,以便可以将 JLabel 作为 Key 传递,并返回 BufferedImage。这样,当悬停在 JLabel 上时,MouseEvent 可以将事件的源发送回侦听器,并且它可以根据接收到的 JLabel 获取正确的 BufferedImage。然后图像可以由我的 ImageFactory 类以上面列出的方式之一处理。

所以基本上当 JLabel 收到 MouseEvent 时,会发生这种情况:

  • MouseEvent 将源 JLabel 发送到 ActionListener
  • Listener 使用源 JLabel 作为 Key 来获取所需的 BufferedImage 块
  • 然后相应地处理 BufferedImage 块(可以是颜色 Alpha 合成、应用到它的缩放因子或添加到它的网格线,或这些的组合)

没有更好的方法来做到这一点?这对我用了 2 年的笔记本电脑没有任何明显的影响,但是当鼠标与我的旧台式机上的 JLabels 交互时,会有非常明显的延迟。

鉴于我将在两者上积极开发,我希望环境能够顺利运行,如果这意味着我必须对内存和 CPU 使用更严格,那就这样吧。

但我似乎真的想不出一个内存效率更高的系统。

ArrayLists 和 HashMaps 是问题吗?许多图像操作是问题吗?

我已经以各种方式利用了 JLabel 的“setName(String)”方法(例如,每个 JLabel 都有一个名称,其中包含它在 JLabel 的一维数组中的位置,以及它在图表上的 x 和 y 坐标,即“maptile#24:1,9”),但这需要遍历数组,我希望专门用键抓取 BufferedImages 会更有效。

0 投票
5 回答
2396 浏览

python - 为大量/不精确的数据计算统计数据的有效方法

我在一个文本文件中存储了超过 6500 万个数值。我需要计算最大值、最小值、平均值、标准差以及 25、50 和 75 个百分位数。

通常我会使用附加的代码,但我需要一种更有效的方法来计算这些指标,因为我无法将所有值 p 存储在列表中。如何在 Python 中更有效地计算这些值?

0 投票
2 回答
2566 浏览

vb.net - If 语句中的内存效率

我正在更多地考虑我的程序现在将使用多少系统内存。我目前正在大学做 A 级计算,我知道在大多数程序中差异可以忽略不计,但我想知道以下内容是否真的有任何区别,在任何语言中。

假设我想根据条件是否为真输出“True”或“False”。就个人而言,我更喜欢这样做:

但是,我想知道以下是否会消耗更少的内存等:

显然,这是一个非常简化的示例,在我的大多数情况下,还有更多内容要输出,而且我意识到在大多数商业程序中,这类语句很少见,但希望你能明白其中的原理。

我在这里专注于 VB.NET,因为这是课程使用的语言,但我真的很想知道这在不同的编程语言中有何不同。

0 投票
1 回答
154 浏览

c++ - OpenCV - 直接将矩阵乘法结果复制到另一个矩阵的子集

我尝试将矩阵乘法结果直接复制到另一个矩阵的子集:

是否可以直接将结果复制到矩阵 c 中,例如(我知道这不起作用):

不是更有效率吗?

0 投票
3 回答
147 浏览

java - 将字符串添加到此字符串数组的最有效方法是什么?

我有一个名为 myStrings 的字符串 []。我不能将它转换为其他任何东西,它必须保持一个字符串数组。但是,我需要再添加一个字符串,所以我编写了这个方法。我确信有一种更好、更快、更少内存密集型的方法可以做到这一点,但我看不到它。任何人都可以提供一个 java api 唯一的方法来解决这个问题吗?我正在使用 Java 1.7

0 投票
4 回答
11025 浏览

python - 获取python迭代器的第一个和最后一个元素的最快方法

我正在尝试对交互器的第一个和最后一个元素进行检查。它有几千个条目,所以我需要一种快速的检查方法。如果找到这篇文章,那让我采取了这个策略。

有人对更快的方法有什么意见吗?非常感谢!

0 投票
1 回答
112 浏览

java - 设置图像的最有效方法

必须有一些更有效的方法来设置图像不是吗?或者这是最好的吗?

我真的不需要这个setURL()方法,它只是让事情变得更干净、更容易处理。我只想知道是否有更有效的方法来设置自定义图像。即使没有这两种方法,仍然需要编写很多代码。它变得更简单了吗?我的意思是为什么我们不能只制作一个新图像而不是先制作一个ImageIcon然后说Image myImage = ImageIcon.getImage()。没有抱怨,但是如果你有 2000 多个图像要设置,那将是很多没有一两个方法的代码(以我的世界为例吧?如果我自己这么说,那就是相当多的图像)。电子游戏大多只有大量图像,而不是代码有时只占代码的 30%。

0 投票
4 回答
608 浏览

c# - 在循环内部和外部创建对象之间的内存有什么区别

我想弥补我知识上的一些空白。从此开始。

示例(c#):

在这里,我在同一个循环中使用了两个 Person 对象,只是为了节省空间。

我的理解是,每次实例化朋友时,我都会重用内存中的相同位置,覆盖现有的 Person 对象(如果存在)。

而每个新的“家伙”对象都被分配了一个新的内存位置。

如果这是正确的,如果这是错误的,请纠正我,这意味着使用“friend”而不是“guy”更节省内存。

会不会有“家伙”会更好的情况?它可能取决于构造函数的实现吗?