Tag: 内存泄漏

unit testing内存泄漏

我有一个应用程序,其中存在大量内存泄漏。 例如,如果打开一个视图并关闭它10次,我的内存消耗会上升,因为视图没有被完全清理掉。 这些是我的内存泄漏。 从测试驱动的角度来看,我想写一个测试certificate我的泄漏和(在我修复泄漏之后)断言我修复了它。 这样我的代码以后就不会被破解了。 简而言之: 有没有办法断言我的代码没有从unit testing中泄漏内存? 我可以做这样的事情: objectsThatShouldNotBeThereCount = MemAssertion.GetObjects().Count; Assert.AreEqual(0, objectsThatShouldNotBeThereCount); 我对分析不感兴趣。 我使用Ants profiler(我非常喜欢),但也想编写测试以确保’泄漏’不会再回来 我正在使用C#/ Nunit,但是对于有这个哲学的人来说,我很感兴趣…

任何工具来检测哪个DLL泄漏内存?

我有一个应用程序,其中包括许多dll(托管和非托管)。 应用程序在执行某些function主义时泄漏内存。 所以我想知道,无论如何都要检测function运行时哪些dll正在泄漏内存? 我不是在源代码级别讨论,只是找到泄漏内存的dll。 谢谢!

使用带有__ComObject的“dynamic”关键字时,在RuntimeBinder中泄漏

当在C#中使用带有__ComObject实例的“dynamic”关键字时,有没有人知道是否有办法防止RuntimeBinder中的内存泄漏? 我得到以下代码: var t = Type.GetTypeFromCLSID(new Guid(“BB06C0E4-D293-4f75-8A90-CB05B6477EEE”)); while (true) { dynamic o = System.Activator.CreateInstance(t); Marshal.ReleaseComObject(o); } 这会泄漏LocalVariableSymbol类实例(以及Microsoft.CSharp.RuntimeBinder.Semantics命名空间中的其他实例)。 用“对象”替换“动态”即: object o = System.Activator.CreateInstance(t); 修复泄漏,但我更喜欢继续使用动态(实际代码更复杂,并使用“动态”)。 我知道RuntimeBinder单例缓存数据,这会导致泄漏,但你知道是否有任何方法来清理缓存等? 非常感谢! 类似的问题: 内存溢出:拥有越来越多的Microsoft.CSharp.RuntimeBinder.Semantics CLR类中的内存泄漏 相关链接: https://connect.microsoft.com/VisualStudio/feedback/details/1925659 (由微软退休) https://github.com/dotnet/roslyn/issues/2887

WPF图像控制内存泄漏

我的程序有很多小图像(图像控件很小,而不是图像本身),并说了很多我的意思是超过500.这些图像是异步生成的,然后分配给之前初始化的Image控件。 基本上我的代码执行以下操作: filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(“{0}.JPG”, Guid.NewGuid().GetHashCode().ToString(“x2”))); converter.ConvertPdfPageToImage(filename, i); //Fire the ThumbnailCreated event onThumbnailCreated(filename, (i – 1)); 在创建图像的代码中没有内存泄漏,我有以下代码: string[] files = Directory.GetFiles(“C:\\Users\\Daniel\\Pictures”, “*.jpg”); for(int i=0; i<files.Length; i++){ onThumbnailCreated(files[i], i); } 问题仍然存在。 这发生在事件处理程序方法中: void Thumbnails_ThumbnailCreated(ThumbnailCreatedEventArgs e, object sender) { //Since we generate the images async, we need to use Invoke this.parent.Dispatcher.Invoke(new SetImageDelegate(SetImage), e.Filename, e.PageNumber); } private […]

CLR内存exception

我们得到了很多内存exception,我们似乎无法诊断出现了什么。 这似乎是一个问题,会在几分钟内将内存使用量从300兆的增加到千兆以上。 现在这是一个IIS应用程序,有3个应用程序域在不同的线程池中运行。 我们想记录内存exception即将发生的时间。 所以我们可以尝试找到一种模式。 我的问题是:最好的方法是什么? 有没有办法每分钟查询内存使用情况,看看它有多高,并发送警报电子邮件。 或者编写一个可以监控CLR内存使用情况的应用程序? 一个想法或方向更受欢迎。 编辑 我正在使用Perfmon,但除非我正在观察这个过程,否则它不是那么有用。 我只能看到是什么以及什么时候。 我还使用了红门内存配置文件工具,顺便说一句,这真是太棒了,只是我似乎无法点击导致exception的页面或进程。

一个简单的WPF应用程序中的非托管泄漏

当鼠标移动到我的WPF应用程序上时,我遇到了泄漏非托管内存的情况。 具体来说,当我在perfmon或Red Gate的内存分析器中分析应用程序时,私有字节会单调增加,但所有托管堆中的字节保持不变 – 我相信,这意味着应用程序具有非托管泄漏。 我创建了一个简单的repro应用程序,但我看不出问题出在哪里。 该应用程序包含一个包含四个项目的ListView。 在这些项目上快速移动鼠标会导致问题。 如果你有兴趣重现这个问题,这是代码 – 它不漂亮,但它很简单。 谢谢 编辑:我已为此问题创建了Microsoft Connect问题。 App.xaml中 App.xaml.cs using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Windows; namespace WpfLeakRepro { /// /// Interaction logic for App.xaml /// public partial class App : Application { } } Generic.xaml Window1.xaml Window1.xaml.cs using System; using System.Collections.Generic; using […]

堆内存问题

有一个WCF自托管服务,必须在99%的时间内工作。 有时我们会遇到一些像这样的内存问题: 但在此问题之后,服务正常。 我们如何管理这个? 任何提示和要点,以提供强大的服务,将在不同的情况下生存,非常受欢迎。

在.Net C中释放资源#

我是C#和.NET的新手,并且一直在阅读它。 我需要知道为什么以及何时需要释放资源? 垃圾收集器不能处理所有事情吗? 我什么时候需要实现IDisposable,它与C ++中的析构函数有什么不同? 此外,如果我的程序相当小,即屏幕保护程序,我是否需要关心释放资源? 谢谢。

处理StringBuilder对象

如何有效地处理StringBuilder对象? 如果用户一次性生成多个报告,我的应用程序最终会占用大量内存。 我在线阅读了几个网站,以下内容可能有所帮助: StringBuilder sb = new StringBuilder(1000000); // loop goes here adding lots of stuff to sb exampleObject.Text = sb.ToString(); sb.Length = 0; 最后一行真的有帮助吗? 还有其他任何处理方法吗? 注意:这并没有真正阻止我的用户继续使用该应用程序。 我只是想知道是否有办法避免冗余内存使用。

如何在C#/ .NET中创建内存泄漏

可能重复: 托管代码中是否可能存在内存泄漏? (特别是C#3.0) C#中的内存泄漏 昨天有一个类似的问题,但是对于Java,所以我很感兴趣 – 在C#/ .NET中创建内存泄漏需要什么(不使用不安全的)?