Tag: memory leaks

如果任务管理器中的Mem Usage不断增加,如何知道是否存在内存泄漏

我写了一个小的Server类,它基本上是一个TcpListener包装器和ThreadPool线程spawner。 线程运行Server :: ProcessMessage(),它执行一些工作来回发送消息,然后在它结束时退出。 但是在退出函数之前,我还调用TcpClient.GetStream()。Close()然后调用TcpClient.Close()。 我不使用任何Mutex或ManualResetEvent WaitHandles。 测试了客户端和服务器,一切正常,除了在任务管理器中,它显示每个Server :: ProcessMessage()上的Mem Usage不断增加。 即使所有客户端应用程序都已断开连接并关闭,Mem Mem仍然存在,而不是减少。 服务器作为Windows服务运行。 我怎么知道它是否是内存泄漏的迹象,或者只是垃圾收集器没有完成其工作(还)? 谢谢。 编辑:我想我找到了“内存泄漏”的原因。 我的Server :: ProcessMessage()中有Console.WriteLine()。 如果有一种更简单的方法来检查内存问题,它仍然会有所帮助。

Informix内存泄漏

我使用Informix遇到了一个奇怪的问题(具体来说,我使用的是IBM.Data.Informix命名空间,4.10 Client SDK)。 我使用ODBC连接到IBM Informix数据库并遇到内存泄漏问题。 文档相当稀疏,我被锁定使用我目前安装的驱动程序/ SDK。 这是我用于数据库上下文的代码: public class IfxDbContext : IIfxDbContext { private readonly string _connectionString; //private readonly IfxConnection _connection; public IfxDbContext(string connectionString) { _connectionString = connectionString; //IfxConnection conn = new IfxConnection(connectionString) {ConnectionString = connectionString}; //_connection = conn; } public IEnumerable GetItems() { var items = new List(); try { using (IfxConnection conn […]

Windows 10上的.NET FontFamily内存泄漏

在Windows 10上,即使在调用Dispose方法之后,System.Drawing.FontFamily.IsStyleAvailable方法似乎也将分配的空间留在内存中。 我写了一个简单的控制台应用程序来测试它: using System; using System.Drawing; using System.Diagnostics; namespace ConsoleApplication1 { class Program { static string getMemoryStatusString() { using (Process p = Process.GetCurrentProcess()) { return “(p: ” + p.PrivateMemorySize64 + “, v:” + p.VirtualMemorySize64 + “)”; } } static void Main(string[] args) { string s = getMemoryStatusString(); foreach(FontFamily fontFamily in FontFamily.Families) { Console.Write(fontFamily.Name + […]

C# – 试图找到剩余的EventHandler,防止控件超出范围

长话短说,我inheritance了一个相当复杂的应用程序,我试图追踪涉及表单的内存泄漏。 现在,每次关闭表格并提出新表格时,旧表格仍留在记忆中。 我跟踪了一个由程序中的控件拥有和设置的静态事件的问题(显然,只要静态事件被设置,该控件的任何实例都不被认为超出了范围,即使没有其他人提到所述控件)。 现在,我正在努力追查剩下的问题。 使用MemProfiler和ANTS Memory Profile,我了解到根执行路径如下: FormOpenWatch <– The item which remains active System.EventHandler — (this as Delegate)._target System.Object[] System.EventHandler — (this as MultiCastDelegate)._invocationList System.ComponentModel.EventHandlerList+ListEntry — handler System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList+ListEntry — next System.ComponentModel.EventHandlerList — head PTU.MdiPTU — (this as Component).events <– The base application 任何人都对我可能想要的东西有任何见解? 我发现在基本应用程序中添加了一个Shown事件,并确保在处理表单时将其删除,但这似乎没有解决问题。 非常感谢您提供的任何帮助。 […]

使用平台Invoke(C#)在非托管代码中分配和释放内存

我想在非托管代码(C ++)中分配和释放内存,我们从托管代码(C#)中将它们称为函数。 我不确定以下代码是否没有内存泄漏? C#代码: [DllImport(“SampleDLL.dll”)] public extern void getString([MarshalAs(UnmanagedType.LPStr)] out String strbuilder); [DllImport(“SampleDLL.dll”)] public extern void freeMemory([MarshalAs(UnmanagedType.LPStr)] out String strBuilder); …. //call to unmanaged code getString(out str); Console.WriteLine(str); freeMemory(out str); C ++代码: extern void _cdecl getString(char **str) { *str = new char[20]; std::string temp = “Hello world”; strncpy(*str,temp.c_str(),temp.length()+1); } extern void _cdecl freeMemory(char **str) { […]

entity frameworkTypeUsage对象

我在我的应用程序上运行内存分析器以查找可能的内存泄漏。 System.Data.Metadata.Edm.TypeUsage对象的数量一直在增长,看起来这可能是我的内存问题的原因。 有没有人知道从内存中释放这些TypeUsatge对象的方法? 它们看起来是内部的Entity Framework对象,因为我的代码中没有对它们的任何引用。 我已经确认我已将上下文对象包装在using块中,并且正在释放内存,但此类型用法不希望消失。 您将提供的任何帮助将不胜感激。

内存泄漏问题:处置或不处置托管资源?

我在计算昂贵的基于内容的图像检索(CBIR).NET应用程序中遇到奇怪的内存泄漏 概念是有一个带有线程循环的服务类,它捕获来自某些源的图像,然后将它们传递给图像标记线程以进行注释。 服务类以指定的时间间隔从存储库中查询映像标记,并将其存储在其内存缓存(字典)中,以避免频繁的数据库命中。 该项目中的类是: class Tag { public Guid Id { get; set; } // tag id public string Name { get; set; } // tag name: eg ‘sky’,’forest’,’road’,… public byte[] Jpeg { get; set; } // tag jpeg image patch sample } class IRepository { public IEnumerable FindAll(); } class Service { private IDictionary […]

我怎样才能免费获得hbitmap

您好我有以下函数,我后来从c#使用以显示位图“Bitmap.FromHbitmap(IntPtr)”但在几次使用后,这以内存泄漏结束。 IntPtr GetFrame(int Width,int Height,int nFrame) { width= Width; height = Height; HBITMAP hb; m_piHelper->GetBmp(width,height,nFrame,&hb); return IntPtr(hb); } 可能我应该删除对象,但我不知道我能做什么,我在返回之前尝试过,但我最终没有图像,但gdi错误 谢谢,

如何在base64转换后释放内存

我正在尝试流式传输文件的内容。 该代码适用于较小的文件,但对于较大的文件,我会收到Out of Memory错误。 public void StreamEncode(FileStream inputStream, TextWriter tw) { byte[] base64Block = new byte[BLOCK_SIZE]; int bytesRead = 0; try { do { // read one block from the input stream bytesRead = inputStream.Read(base64Block, 0, base64Block.Length); // encode the base64 string string base64String = Convert.ToBase64String(base64Block, 0, bytesRead); // write the string tw.Write(base64String); } while […]

wpf C#中的内存泄漏

我正在使用GalaSoft.MvvmLight套件和WPF Toolkit for DataGrid和DatePicker开发WPF MVVM(在v3.5中)应用程序。 但是,每次在MainWindow加载UserControl时,我都会在应用程序中遇到大量内存泄漏。 我试图通过Scitech Memory Profiler获得确切的问题,尽管我有一些严肃的问题: 如何从VM中的Event取消挂钩/取消绑定RelayCommand ? mscorlib和PresentationFramework也消耗大量内存,其中大部分都是strings 。 我不知道他们来自哪里。 请帮忙。