编辑:我想也许它只是 SceneKit 但后来我为 OpenGL 和 Metal 创建了一个新的 Xcode 项目,这两个引擎都有与 SceneKit 相同的问题,内存缓慢增加。有人可以告诉我这是怎么回事吗?正常吗?为什么?
我最近开始使用场景工具包,每次我使用 SCNAction.repeatForever 为任何节点设置动画或使用渲染循环更新旋转或位置时,调试 session 中显示的内存会缓慢逐渐增加。这甚至发生在 apple 提供的基础项目中,它像喷气式飞机一样简单旋转,但内存每 5-10 秒持续增加约 .1 mb。我让它运行了半个多小时,它一直在增加。我也试过停止动画并且内存没有被释放。我尝试使用多个设备并打开 scnView.showsStatistics = false
据我所知,导致问题的代码是:
self.cubeNode.runAction(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 0.01, z: 0, duration: 1.0/60.0)))
或
func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
rot += 0.01
self.cubeNode.eulerAngles = SCNVector3Make(rot, 0, 0)
}
有没有其他人注意到这个问题?我能做些什么吗?非常感谢任何想法、建议或意见!
编辑: 我注意到: 如果我不使用 Actions 而是走更新功能的路线。 只要我在代码中有这一行:
self.scnView.isPlaying = true
即使我没有更改场景中的任何内容,甚至在我添加任何其他代码(如设置委托(delegate)或添加更新函数(func 渲染器))之前,内存也会增加。
我会进一步调查这个问题,如果我在不增加内存的情况下让它工作,我会发布更新,我还向 apple 提交了一份关于他们的基础项目在你构建和运行时自动增加内存的错误报告。
编辑: 如果走使用 OverlaySKScene 的路线并使用那里的更新功能来更新立方体的位置,内存会增加,那就是没有设置
self.scnView.isPlaying = true
即使在立方体从相机中取出后,内存仍然会增加。
结论: 每当场景中的节点更新时,内存就会增加。
怎么办?
最佳答案
是的。我的经历完全一样,并且能够将其归结为与您完全相同的结论:
SCNAction.repeatForever()“吃掉”内存。
可能会向 Apple 提交错误?
其他 SCNActions 似乎也有问题...(我必须对此进行调查) 我还没有解决方案。我试图用 CABasicAnimation() 替换 SCNActions - 这导致了完全相同的问题(旋转消耗内存):
let rot = CABasicAnimation(keyPath: "eulerAngles.z")
rot.byValue = r
rot.duration = time
rot.repeatCount = .infinity
self.addAnimation(rot, forKey: "rotendless")
关于ios - Xcode 任何 3D 引擎持续缓慢的内存增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40799067/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的