问题标签 [handle-leak]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - GetGuiResources 的使用
GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS)
在开始时WinMain
和最后一次返回之前使用来检测 GDI 泄漏或者更具体地说,我忘记释放的对象是一个好主意吗?
另外我目前想知道为什么我的程序中的第一个调用在4
还没有窗口时返回。
c# - 从 System.Threading.Timer 在 UI 中调用时如何避免泄漏句柄?
似乎在 System.Threading.Timer 的回调中调用 Winforms 控件上的 Invoke 会泄漏句柄,直到释放计时器。有谁知道如何解决这个问题?我需要每秒轮询一个值并相应地更新 UI。
我在一个测试项目中进行了尝试,以确保这确实是导致泄漏的原因,如下所示:
如果您在 Windows 任务管理器中观看,这将泄漏 2 个句柄/秒。
.net - 使用 .NET System.Threading.Thread 类处理泄漏
我有一个问题,我的应用程序中的句柄数量不断增长。我进行了调试并认识到这是由用于某些例程的 System.Threading.Thread 类引起的。为了简化调试,我创建了一个示例 .NET 应用程序:
每次单击按钮时,都会使用 System.Threading.Thread 类创建一个线程。问题是看起来线程没有释放句柄,因为每次点击都会导致句柄的数量增加约 5 个。
问题是:如何手动释放 System.Threading.Thread 类创建的所有句柄?
提前致谢。
c# - 奇怪的手柄泄漏
我的应用程序(基本应用程序是 MFC 与 C++/CLI 互操作,但它也包含很多 C#、Windows 窗体、WPF)有句柄泄漏。应用程序启动后不久,我可以看到任务管理器中的句柄计数不断增长(以每秒 10 个新句柄的速度)。所以我用handles.exe来看看它们是什么类型的句柄。我发现泄漏的句柄是进程句柄。它们是我的应用程序进程的进程句柄。
所以我想知道哪些操作通常会为其运行的进程创建一个句柄。知道吗?你见过这样的事情吗?考虑到我不能使用调试 DLL 并且我只能使用可以 xcopy 部署的工具,我还能做些什么来追踪泄漏。
更新:
我能够向它抛出windbg和!handle, !htrace并发现进程句柄都是使用以下堆栈跟踪创建的(按频率排序):
或者
或者
现在这告诉我什么?
windbg - !htrace 显示没有调用堆栈
当我在 WinDbg 中使用!htrace -diff调试句柄泄漏时,我得到了很多不显示调用堆栈的句柄(可能是正在泄漏的句柄):
这可能是什么原因,我有哪些选项可以进一步调试?
更新:句柄泄漏似乎取决于图形驱动程序或图形卡。当我使用任何形式的 WPF 时,它就会开始泄漏,它只会在某些具有特定显卡/驱动程序的 Windows XP 系统上泄漏。
c# - AdsConnection 没有关闭?
考虑以下代码:
该方法是通用的,因为并非所有客户都有 Adavatage DB 服务器,我们需要回退到 OleDbConnection。然而,在大多数情况下,我们使用 AdsConnection 对象(来自 Advantage.Data.Provider.dll)。
上面的代码关闭连接,并且在退出 using 语句时对象被释放。
当我们使用 Advantage Management Utility 查看广告服务器上的所有连接时,我们注意到连接保持打开状态。但不是所有的!我们可能调用该方法 200 次,只有少数保持打开状态,有时超过客户端 MAX_CONNECTIONS。感谢Jens Mühlenhoff,我们可以解决这个问题。
问题是:
为什么调用 oConn.Close() 时连接没有关闭?有人有什么想法吗?
c# - 在 WinDbg 中显示 C# 堆栈跟踪时出现问题
我在 C# 程序中有句柄泄漏。我正在尝试使用 WinDbg 使用 !htrace 对其进行诊断,大致如this answer中所述,但是当我在 WinDbg 中运行 !htrace -diff 时,我看到的堆栈跟踪不显示我的 C# 函数的名称(或甚至我的 .net 程序集)。
我创建了一个小测试程序来说明我的困难。这个程序除了“泄漏”句柄之外什么都不做。
我编译了程序集,然后在 WinDbg 中我转到“文件”->“打开可执行文件”并选择我的程序 (D:\Projects\Sandpit\bin\Debug\Sandpit.exe)。我继续执行程序,中断它,然后运行“!htrace -enable”,然后继续运行一段时间,然后中断并运行“!htrace -diff”。这就是我得到的:
如您所见,堆栈跟踪缺少我的 C# 函数名称“Main”和“Fun1”。我相信“System_ni+0x ...”框架可能是我的功能框架,但我不知道。我的问题是,如何让 WinDbg 在堆栈跟踪中显示我的 C# 函数的函数名称?
额外信息:我的 WinDbg 符号搜索路径是
SRV C:/symbols http://msdl.microsoft.com/download/symbols;D :\Projects\Sandpit\bin\Debug;srv*
当我在 WinDbg 中打开可执行文件时,我没有收到任何错误。在输出目录(“D:\Projects\Sandpit\bin\Debug”)中有一个名为“Sandpit.pdb”的文件。该项目是在本地构建的,因此 pdb 文件应与 exe 匹配。我从这里下载了 WinDbg 。我在 Visual Studio 的项目设置中选中了“启用本机代码调试”。
c# - 处理 .Net 2.0 windows 应用程序中的泄漏
我们必须处理应用程序中的泄漏。
我们正在我们的应用程序中测试一些查看器进行大约 200 个打开和关闭,发现句柄数约为 200。
对于同一个查看器,内存使用量是恒定的,GDI 计数也是恒定的。
问题是句柄每次都在增加,但不是恒定的。有时增加 5,有时增加 1,有时减少。我们无法看到 GDI 泄漏的持续增加。
我们已经取消订阅了应用程序中注册的所有事件,并且还释放了应用程序中使用的所有控件。在应用程序中也存在一些内存泄漏之前。现在处理所有控件后,它保持不变。
那么在这种情况下,我们还需要检查什么。我们并不感到困惑,因为内存/GDI 计数是恒定的,而句柄只会增加。
任何建议表示赞赏。
c# - 如何检测 c# 应用程序中的句柄泄漏
在我的 C# 应用程序中,当它运行时,我可以在 Windows 任务管理器中清楚地看到句柄列的数量在稳步增加。内存很好,没有增加,只有句柄达到了很高的水平。
我怎样才能调试这个泄漏,检测它并解决句柄泄漏。
谢谢!
c# - 确定 GDI 句柄和 USER 对象的数量
我们为我们的 Windows 窗体 UI 渲染引擎开发了一个小型测试套件,它允许在以自动化方式运行测试用例时测量性能并检测内存泄漏。现在我们也想检查句柄泄漏。在桌面平台上我们可以使用这段代码:
此方法在 Windows Mobile 中似乎不可用。是否有另一种方法可以在 Windows Mobile/CE 上以编程方式确定这些值?