草庐IT

unity-内存GC

全部标签

c# - 如何检测内存泄漏在哪里?

我有一个大型网站,似乎正在占用所有分配的内存。服务器上除此站点外没有其他任何内容。一周之内,它会耗尽2个演出并需要重新启动。目前这是使用IIS7的服务器200832位。我们正在重新安装以使用64位并添加更多内存。如果能够追踪泄漏发生的位置,那就太好了。那么跟踪内存泄漏的最佳实践是什么? 最佳答案 内存泄漏在.NET中并不常见,但当它们发生时,最常见的原因是未附加的事件处理程序。确保在监听器超出范围之前分离处理程序。另一种选择是,如果您忘记在IDisposable资源上调用Dispose()。这可能会阻止清理非托管资源(不由GC处理)

c# - 如何将内存流下载到文件?

我正在使用下面的示例代码在C#中写入内存流并将其下载到文件中。MemoryStreammemoryStream=newMemoryStream();TextWritertextWriter=newStreamWriter(memoryStream);textWriter.WriteLine("Something");byte[]bytesInStream=newbyte[memoryStream.Length];memoryStream.Write(bytesInStream,0,bytesInStream.Length);memoryStream.Close();Response.C

c# - 我可以在不支付 Unity Multiplayer 服务的情况下使用 Unity 网络 HLAPI 吗?

我看到了Unity的Multiplayerservicepage,我完全糊涂了:我可以使用Unity'shigh-levelnetworkingAPI吗?(NetworkManager/NetworkManagerHUD)在已发布的游戏中,无需为UnityMatchmaker和中继服务器(无论它们是什么)付费?我有自己的基于云的虚拟机,我想在上面运行专用服务器。我的项目只是一个我会和friend一起玩的小游戏(没有商业或大型)。我想在我的VM上以专用服务器模式运行该游戏的已发布副本,让我的friend运行他们已发布的客户端副本并通过NetworkManager连接到服务器。我可以免费这

c# - ConcurrentBag<T> 实现中是否存在内存泄漏?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:PossiblememoryleakinConcurrentBag?编辑1:真正的问题是。你能证实这一点吗?还是我的样本有误,我遗漏了一些明显的东西?我认为ConcurrentBag是无序列表的简单替代品。但是我错了。ConcurrentBag确实将自己作为ThreadLocal添加到创建线程,这基本上会导致内存泄漏。classProgram{staticvoidMain(string[]args){varstart=GC.GetTotalMemory(true);newProgram().Start(arg

c# - Unity3D 新的 UI 系统和 ListView

我正在尝试使用新的UnityUI(2014)构建ListView。垂直和可滚动列表应包含图像按钮,它们应根据分配的图像保持纵横比!所有按钮都应拉伸(stretch)到屏幕宽度。按钮不应与下一个按钮有间隙。(很像iOS中的UITableView)我发现新UI附带的VerticalLayoutGroup对我没有帮助,因为它不能很好地嵌入到ScrollRect中。我认为它需要根据包含的项目调整大小才能使其与ScrollRect一起使用。另一个问题是我无法让按钮保持宽高比,我通过编写一个小脚本解决了这个问题(见下文)。为了实际实现所需的列表效果,我创建了一个带有ScrollRect的Canva

C# 基于事件的内存泄漏

我有一个应用程序,由于在对象引用设置为null之前未分离事件而导致一些内存泄漏。应用程序很大,很难通过查看代码找到内存泄漏。我想使用sos.dll查找作为泄漏源的方法的名称,但我被卡住了。我建立了一个测试项目来演示这个问题。这里我有2个类,一个有一个事件,并且如下所示监听该事件namespaceMemoryLeak{classProgram{staticvoidMain(string[]args){TestMemoryLeaktestMemoryLeak=newTestMemoryLeak();while(!Console.ReadKey().Key.Equals('q')){}}}c

c# - 如何在不占用大量内存的情况下显示图像

我正在开发一个silverlight项目,用户可以在其中创建自己的拼贴画。问题当使用BitmapImage类加载一堆图像时,Silverlight会占用大量不合理的RAM。150张图片,其中单张图片最多占4.5mb,占用大约1.6GB的RAM——因此最终会抛出内存异常。我通过流加载它们,因为用户选择他们自己的照片。我在找什么一个类、方法或一些过程来消除被吸走的大量RAM。速度是个问题,所以我不想在图像格式或类似格式之间进行转换。快速调整大小的解决方案可能会奏效。我曾尝试使用WriteableBitmap将图像渲染到其中,但我发现这种方法迫使我在拖放和其他我希望用户能够对图像执行的操作时

c# - GC 行为和 CLR 线程劫持

我在CLRviaC#一书中阅读了有关GC的内容,特别是关于CLR何时开始收集的内容。我知道它必须在收集发生之前暂停线程,但它提到它必须在线程指令指针到达安全点时执行此操作。在它不在安全点的情况下,它会尝试快速到达一个安全点,它通过劫持线程(在线程堆栈中插入一个特殊的函数指针)来实现。这一切都很好,但我认为默认情况下托管线程是安全的?我最初认为它可能指的是非托管线程,但CLR允许非托管线程继续执行,因为任何正在使用的对象无论如何都应该被固定。那么,什么是托管线程中的安全点,GC如何确定那是什么?编辑:我认为我不够具体。根据thisMSDNarticle,即使调用了Thread.Suspe

c# - 在 Unity 2D 中拖动对象

我一直在寻找适用于Unity2D的对象拖动脚本。我在网上找到了一个很好的方法,但它似乎只适用于Unity3D。这对我不利,因为我正在制作2D游戏并且它不会以这种方式与“墙壁”发生碰撞。我曾尝试将其重写为2D,但使用Vectors时遇到了错误。如果你能帮我把它改写成二维的,我会很高兴。这是在3D中运行的代码:usingUnityEngine;usingSystem.Collections;[RequireComponent(typeof(BoxCollider))]publicclassDrag:MonoBehaviour{privateVector3screenPoint;privat

c# - 内存重新排序会导致 C# 访问未分配的内存吗?

据我了解,C#是一种安全语言,不允许访问未分配的内存,除非通过unsafe关键字。但是,它的内存模型允许在线程之间存在不同步访问时重新排序。这会导致竞争危险,其中对新实例的引用似乎在实例完全初始化之前可用于竞争线程,并且是双重检查锁定的一个众所周知的问题。ChrisBrumme(来自CLR团队)在他们的MemoryModel中解释了这一点文章:Considerthestandarddouble-lockingprotocol:if(a==null){lock(obj){if(a==null)a=newA();}}Thisisacommontechniqueforavoidingaloc