2016-07-04 148 views
1

所以我已经问过这个问题上的统一论坛,但没有帮助我很多:/。今天,我决定让朋友试试我的游戏,所以基本上我创建了一台服务器,以便其他客户/朋友可以连接到它。在玩了我的游戏大约20分钟后,我迅速检查了任务管理器,并且我的游戏使用了大约3.5 GB的RAM! PHOTO HERE当我看着日志,说什么这样的:Unity-独立筹建耗尽内存

Unity Player [version: Unity 4.6.1f1_d1db7a1b5196] 

mono.dll caused an Access Violation (0xc0000005) 
    in module mono.dll at 0023:101071a1. 

Error occurred at 2016-07-04_163050. 
C:\Users\Cooler Master\Desktop\TL\TL.exe, run by Cooler Master. 
77% memory in use. 
0 MB physical memory [1814 MB free]. 
0 MB paging file [1039 MB free]. 
0 MB user address space [68 MB free]. 
Write to location 00000000 caused an access violation. 

所以在我的比赛有一些东西吃了保持我的RAM。游戏运行时,每秒RAM大约需要3MB。我在Internet上发现了关于Resources.UnloadUnusedAssets的一些信息,但我不知道如何编写这样的脚本!我知道如何在C#中编写,但只有像GUI,Newtorkinf,Physics等简单的脚本。我也从kickasstorrent下载了统一的专业版,只能看到Profiler窗口,但这完全没有帮助我

非常感谢任何回复! 另外,如果你想查看游戏并看看发生了什么:http://gamejolt.com/games/thuglifealpha/61660

再次感谢! :)

+0

这个问题将很难解决,因为它看起来像只有弄清楚发生了什么事情是我们看到的源代码。在您的代码中查找数组。像'myclass = new Myclass [10];'在更新循环中。在“开始”功能中执行一次,然后重新使用它。你是从很多脚本做'myclass = new Myclass()'吗?你是否通过附加脚本来实例化GameObjects?如果是这样,停下来学习对象池。用'foreach'循环遍历'List'?改为使用'for'循环。还有许多其他可能的问题。没有代码,很难提供帮助。 – Programmer

+0

我真的不明白你的意思:myclass = new Myclass对不起,我很抱歉。但我只用了一年的统一,所以我还是初学者。但我发现,使用方法(已经提到)卸载纹理和资产一些人,但我无法找到任何脚本到,我不知道该怎么做,你了解这写这些类型的脚本?而且我也有一个脚本,大概有3500行,我试图删除这个脚本并构建游戏,但RAM仍在增长。我将所有纹理的大小从1024更改为256像素,但仍然没有结果。老版本的游戏工作正常。 –

+0

Unity 5免费版本的功能与Pro的所有功能非常相似,因此您可以免费使用分析器。添加探查内存选项卡的一些截图(点击需要的内存快照太) – mgear

回答

0

没有看到你的代码是很难找到确切的问题。但是我应该从查找实例化/销毁新对象的代码开始。它会导致GC收集未使用的对象并分配新的内存。很快你的空闲内存变得如此碎片化,以至于没有合适的内存空间来分配新的对象。

我强烈建议阅读有关优化文章团结