![]() |
1
5
你可以试试 enabling server mode for the Garbage Collector . 默认情况下,所有.NET应用程序都在工作站模式下运行,GC尝试在保持应用程序运行的同时进行扫描。如果打开服务器模式,它会暂时停止应用程序,以便更快地释放内存(更多),并且它还为每个处理器/核心使用不同的堆。 大多数服务器应用程序在使用GC服务器模式时都会看到性能的提高,特别是在它们分配了大量内存的情况下。缺点是当你的应用程序开始耗尽内存时(直到GC完成),它基本上会停止运行。
*
要启用此模式,请将以下内容插入
|
![]() |
2
5
当您达到物理内存限制时,操作系统将开始分页(即,将内存写入磁盘)。这确实会导致你看到的那种减速。 解决?
如果内存不是问题所在,那么您的应用程序可能很难达到CPU?你看到CPU接近100%了吗?如果是这样,请检查正在反复迭代的大型集合。 |
![]() |
3
2
|
![]() |
4
2
其他答案中提到了很多好东西。不过,我要把我的两个便士(或美分——取决于你来自哪里!)不管怎样。 假设这确实是一个64位的过程,如您所说,这里有几个调查方法… 您要检查哪些内存使用情况?内存使用还是VMEM大小?vmem大小实际上很重要,因为它适用于分页和非分页内存。如果这两个数字相差很远,那么内存的使用确实是导致速度减慢的原因。 当事情开始变慢时,整个服务器的实际内存使用情况是什么?减速是否也适用于其他应用程序?如果是这样,则可能存在内核内存问题,这可能是由于大量磁盘访问和低级别资源使用(例如,创建20000个互斥体,或通过使用win32 hbitmap的代码加载几千个位图)。您可以在“任务管理器”上看到一些这方面的指示(尽管Windows 2003的版本比2008的版本更能直接提供信息)。 当你说这个应用程序的速度变慢了,你怎么知道?你用的是大字典还是大单子?难道这不仅仅是因为内部数据结构变得越来越大,从而使任何内部算法正在执行的工作变得复杂化吗?当你得到巨大的数字时,一些算法会开始变得更慢。 当应用程序以全速运行时,它的CPU负载是多少?实际上和减速发生时一样吗?如果CPU使用量随着内存使用量的增加而减少,那么这意味着无论它在做什么,操作系统都需要更长的时间来完成,这意味着它可能对操作系统施加了太多的负载。如果CPU负载没有区别,那么我猜是内部数据结构变得如此之大,以至于减慢了算法的速度。 我当然会考虑在应用程序上运行一个Perfmon——从一些.NET和本机内存计数器、缓存命中和未命中以及磁盘队列长度开始。在应用程序的整个过程中运行它,从启动到它开始像一只哮喘乌龟一样运行,您可能也会从中得到一些提示。 |
![]() |
5
1
浏览了其他答案后,我想说有很多好主意。有一个我没看到: 获取一个内存分析器,例如Scietech的memprofiler。它会告诉你分配的是什么,按什么分配,它会显示出整个n片骰子。 它还有视频教程,以防你不知道如何使用它。在我的案例中,我发现我有不使用(…)的IDisposable实例。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |