Tag: memory leaks

从托管C#释放非托管内存及其指针

简而言之的问题是:如何释放从本机DLL返回的内存作为托管代码中的ItrPtr? 详细信息:假设我们有简单的函数将两个参数作为OUTPUT,第一个是参考指针到字节数组,第二个是参考Int。 该函数将根据某些规则分配字节数,并返回内存指针和字节大小以及返回值(1表示成功,0表示失败)。 下面的代码工作正常,我可以正确获取字节数组和字节数和返回值,但是当我尝试使用指针(IntPtr)释放内存时,我得到exception: Windows已在TestCppDllCall.exe中触发了断点。 这可能是由于堆的损坏,这表示TestCppDllCall.exe或它已加载的任何DLL中的错误。 这也可能是由于用户在TestCppDllCall.exe具有焦点时按下F12。 输出窗口可能包含更多诊断信息。 为了清楚起见: 下一个C#代码与其他DLL函数正常工作具有相同的签名并释放内存工作没有任何问题。 如果您需要更改分配内存方法或添加任何其他代码,则接受(C)代码中的任何修改。 我需要的所有function是Native DLL函数接受两个参数引用(Byte数组和int,在c#[IntPtr of byte array and int]中)根据一些规则填充一些值并返回函数结果(Success或Fail) 。 CppDll.h #ifdef CPPDLL_EXPORTS #define CPPDLL_API __declspec(dllexport) #else #define CPPDLL_API __declspec(dllimport) #endif extern “C” CPPDLL_API int writeToBuffer(unsigned char *&myBuffer, int& mySize); CppDll.cpp #include “stdafx.h” #include “CppDll.h” extern “C” CPPDLL_API int writeToBuffer(unsigned char*& myBuffer, int& mySize) { mySize […]

C#事件内存泄漏

这些未订阅事件何时发生内存泄漏? 我应该编写析构函数还是实现IDisposable来取消订阅事件?

使用DirectorySearcher.FindAll()时内存泄漏

我有一个漫长的运行过程,需要经常在Active Directory上进行大量查询。 为此,我一直使用System.DirectoryServices命名空间,使用DirectorySearcher和DirectoryEntry类。 我注意到应用程序中存在内存泄漏。 它可以使用以下代码重现: while (true) { using (var de = new DirectoryEntry(“LDAP://hostname”, “user”, “pass”)) { using (var mySearcher = new DirectorySearcher(de)) { mySearcher.Filter = “(objectClass=domain)”; using (SearchResultCollection src = mySearcher.FindAll()) { } } } } 这些类的文档说如果没有调用Dispose(),它们将泄漏内存。 我试过没有处理过,它只是泄漏了更多的内存。 我已经使用框架版本2.0和4.0对此进行了测试。之前是否有人遇到此问题? 有没有解决方法? 更新:我尝试在另一个AppDomain中运行代码,它似乎也没有帮助。

C#WPF中的内存泄漏

我可以使用一些建议来跟踪C#中内存泄漏的原因。 我理解什么是内存泄漏,我知道它们出现在C#中的原因,但我想知道你过去用什么工具/策略来解决它们? 我正在使用.NET Memory Profiler,我发现我关闭它管理的窗口后,我的一个巨大的主要对象是留在内存中,但我不知道如何处理严重的所有链接。 如果我不够清楚只是发一个问题的答案,我会编辑我的问题作为回应。 谢谢!

HttpClientHandler / HttpClient内存泄漏

我有10到150个长生命类对象,可以调用使用HttpClient执行简单HTTPS API调用的方法。 PUT调用示例: using (HttpClientHandler handler = new HttpClientHandler()) { handler.UseCookies = true; handler.CookieContainer = _Cookies; using (HttpClient client = new HttpClient(handler, true)) { client.Timeout = new TimeSpan(0, 0, (int)(SettingsData.Values.ProxyTimeout * 1.5)); client.DefaultRequestHeaders.TryAddWithoutValidation(“User-Agent”, Statics.UserAgent); try { using (StringContent sData = new StringContent(data, Encoding.UTF8, contentType)) using (HttpResponseMessage response = await client.PutAsync(url, sData)) { using (var content […]