Tag: memory leaks

SoundPlayer导致内存泄漏?

我正在用C#编写一个基本的写作应用程序,我想让程序在输入时输出打字机的声音。 我已经将我的RichTextBox上的KeyPress事件挂钩到一个函数,该函数使用SoundPlayer每次按下一个键时播放一个简短的wav文件,但是我注意到一段时间后我的计算机慢慢爬行并检查我的进程,audiodlg .exe正在使用5 GIGABYTES的RAM。 我正在使用的代码如下: 我将SoundPlayer初始化为程序启动时的全局变量 SoundPlayer sp = new SoundPlayer(“typewriter.wav”) 然后在KeyPress事件上我只是打电话 sp.Play(); 有人知道导致大量内存使用的原因是什么吗? 该文件不到一秒钟,因此它不应该太过堵塞。

IDisposable实现 – ‘if(disposing)’应该包含什么

我一直在winforms应用程序中修复一些内存泄漏问题,并注意到一些非显式处置的一次性对象(开发人员没有调用Dispose方法)。 Finalize方法的实现也没有用,因为它没有进入if (disposing)子句。 所有静态事件取消注册和收集清除都已放入if (disposing)子句中。 如果对象是一次性的,最好的做法就是调用Dispose,但不幸的是,有时会发生这种情况 如果存在非托管对象,静态事件处理程序和一些需要在处置时清除的托管集合。 什么是决定什么应该进入的方式以及if (disposing)条款应该采用什么方式。 处理方法。 // Dispose(bool disposing) executes in two distinct scenarios. // If disposing equals true, the method has been called directly // or indirectly by a user’s code. Managed and unmanaged resources // can be disposed. // If disposing equals false, the method has been called by […]

C#/ XNA巨型内存泄漏

这是我在此的头一篇博文。 我正在使用XNA在Visual Studio 2010中制作游戏,而且我遇到了巨大的内存泄漏。 我的游戏开始使用17k ram,然后在十分钟之后达到65k。 我运行了一些内存分析器,他们都说正在创建String对象的新实例,但它们不是实时的。 String的实时实例数量根本没有变化。 它还创建了Char [](我期望它),Object []和StringBuilder的实例。 我的游戏很新,但是在这里发布的代码太多了。 我不知道如何摆脱不活的实例,请帮忙!

在循环图中使用ThreadLocal 时内存泄漏

我刚刚遇到了垃圾收集器关于System.Threading.ThreadLocal这种奇怪的“行为”,我无法解释。 在正常情况下, ThreadLocal实例在超出范围时将被垃圾收集,即使它们没有正确处理,除非它们是循环对象图的一部分。 以下示例演示了此问题: public class Program { public class B { public AA; } public class A { public ThreadLocal LocalB; } private static List references = new List(); static void Main(string[] args) { for (var i = 0; i c.IsAlive)); } static void CreateGraph() { var a = new A { LocalB = […]

有什么方法可以解决C#中的内存泄漏问题

我正在学习C#。 据我所知,您必须正确设置以使垃圾收集器实际删除所有内容。 我正在寻找多年来从你那里学到的智慧,聪明。 我来自C ++背景,非常习惯代码气味和开发模式。 我想知道C#中的代码气味是什么样的。 给我建议! 删除内容的最佳方法是什么? 当你遇到“内存泄漏”时,你怎么能弄明白? 编辑:我正在尝试开发一个“总是为内存管理做的事情”的列表 非常感谢。

追踪内存泄漏(C#)的最佳方法仅在一个客户的盒子上可见

追踪只能在一个客户的测试/发布盒中找到的内存泄漏的最佳方法是什么,而在其他地方没有?

如何找到处置和内存问题? C#

我的应用程序不久前使用的是150mb内存,现在是286mb。 它慢慢上升所以我必须忘记处理某些东西。 这对我来说不是一个问题,因为我有4gb,但我想把它发送给只有1gb内存的其他人。 然后逐行检查代码我怎样才能找到需要处理的对象或者只是一般大的对象?

在匿名代表中捕获的私有字段

class A { public event EventHandler AEvent; } class B { private A _foo; private int _bar; public void AttachToAEvent() { _foo.AEvent += delegate() { … UseBar(_bar); … } } } 由于委托捕获变量this._bar,它是否隐式持有B的实例? 将B的实例通过事件处理程序引用并通过A的实例捕获变量吗? 如果_bar是AttachToAEvent方法的局部变量,它会有所不同吗? 因为在我的情况下,A的实例寿命更长并且远小于B的实例,所以我担心通过这样做会导致“内存泄漏”。

在C#中优化内存的最佳实践

在C#中优化内存的最佳实践是什么? 我正在使用以下技术来优化我的记忆力。 使用后处理对象或使其为空。 使用try / finally或使用块。 如果需要,请使用GC.Collect()。 删除不必要的对象初始 管理图像缓存。 Mange BLOB数据,内存流和文件流 即使有内存泄漏。 我的应用程序使用以下内容: 处理配置文件, 使用其他XML文件。 使用图像function放大,缩小,显示不同类型的图像,更改图像颜色,以xml格式保存数据。 在SQL Server中保存数据。

什么是GC孔?

我用C#写了一个很长的TCP连接套接字服务器。 我的服务器内存中出现峰值。 我使用dotNet Memory Profiler(一种工具)来检测内存泄漏的位置。 内存分析器指示私有堆很大,内存类似于下面(数字不是真实的,我要显示的是GC0和GC2的孔非常大,数据大小正常): Managed heaps – 1,500,000KB Normal heap – 1400,000KB Generation #0 – 600,000KB Data – 100,000KB “Holes” – 500,000KB Generation #1 – xxKB Data – 0KB “Holes” – xKB Generation #2 – xxxxxxxxxxxxxKB Data – 100,000KB “Holes” – 700,000KB Large heap – 131072KB Large heap – 83KB Overhead/unused – 130989KB […]