Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改背景图像会导致内存泄漏(电子)_Javascript_Html_Css_Electron - Fatal编程技术网

Javascript 更改背景图像会导致内存泄漏(电子)

Javascript 更改背景图像会导致内存泄漏(电子),javascript,html,css,electron,Javascript,Html,Css,Electron,我有一个具有多个背景图像的div元素,但位于不同的位置[0..n] 图像格式为png,但为动画(apng) 开始时,每个位置都没有图片(背景图片:无,无,…,无)。 但是,每次我在某个位置使用动画精灵更新此属性时,缓存都会保留属性中引用的所有以前的图像,并且内存会不断增加 function test() { let charImg = '' for (let i=0; i<g.characterList.image.length; i++) { if (charImg !=

我有一个具有多个背景图像的div元素,但位于不同的位置[0..n]

图像格式为png,但为动画(apng)

开始时,每个位置都没有图片(背景图片:无,无,…,无)。 但是,每次我在某个位置使用动画精灵更新此属性时,缓存都会保留属性中引用的所有以前的图像,并且内存会不断增加

function test() {
  let charImg = ''
  for (let i=0; i<g.characterList.image.length; i++) {
    if (charImg !== '') charImg += ', '
    let param = '#date=' + new Date().getTime()
    charImg += 'url("./sprite.png' + param + '")'
  }

  const character = document.getElementById('character')
  character.style.backgroundImage = charImg
}
功能测试(){
让charImg=''
对于(设i=0;i这不是泄漏:)


你是如何发现这是一个内存泄漏的?这意味着正因为如此(在每次新的图像加载时)内存增加不是一个泄漏,当系统需要内存时,它将从内存中清除未使用的图像。你是否也感觉到你的应用程序中有任何其他差异,比如速度变慢或其他什么

5单个应用程序的流程

据我所知,electron应用程序启动了Chromium,其中一些进程和Node.JS服务器有一些进程

根据我的经验,即使关闭了Electron应用程序,它也不会从后台删除

electron.app.once('window-all-closed', electron.app.quit);
electron.app.once('before-quit', () => {
    window.removeAllListeners('close');
});

你是如何发现这是内存泄漏的?这意味着正因为如此(每次新图像加载时)内存增加不是泄漏,当系统需要内存时,它将从内存中清除未使用的图像。你是否也感觉到应用程序中有任何其他差异,比如速度变慢或其他什么else@mastermind对我来说,就是“sprite.png”大小为10.0Kb。我向url添加了一个参数,这一事实使精灵再次完全加载,但背景图像属性中使用的前一个精灵保留在内存中,并且不是由GC释放的。因此,我认为不真实的是,所有内容都保留在内存中:内存预期:只需要“sprite.png#date=_dateN"所需的实际结果:“sprite.png#date=date1”、“sprite.png#date=date2”、…、“sprite.png#date=dateN”(“sprite.png#date=date1”到“sprite.png#date=dateN-1”不需要).我这样想是不是错了?@mastermind抱歉,事实上,当应用程序空闲并最小化时,缓存会被清除!但是,是的,我必须最小化窗口并等待几秒钟,等待它发生。因此我猜这本身不是内存泄漏。但是,我相信我的整个代码中仍然存在内存泄漏,因为“我的项目”“内存增加(长时间使用时超过30毫欧)即使最小化也不会被清除。我删除了主js文件中的大多数全局变量,将它们放入变量
g
。该文件包括多个其他js文件,这些文件都是模块。有什么想法吗?@mastermind此外,我仍然不知道这5个进程对于单个应用程序有什么区别。也许它可以n帮我更好地了解原因?P看,有那么一秒钟我想我得换一下航空公司了。谢谢。:)
electron.app.once('window-all-closed', electron.app.quit);
electron.app.once('before-quit', () => {
    window.removeAllListeners('close');
});