获取总 gdi 句柄(或免费 gdi 句柄)的命令行方式

获取总 gdi 句柄(或免费 gdi 句柄)的命令行方式

我正在寻找一种工具来跟踪 GDI 使用情况,以便在接近最大值时可以收到警报。这是在 Windows XP SP3 上。

作为背景,以下是一些不太符合要求的相关页面/应用程序:

有一个关于此问题的帖子http://forum.sysinternals.com/topic13580.html,但没有真正的答案。

上面文章中提到的确实做了总计,但它基于 GUI,更重要的是它似乎使用了很多 CPU。

使用情况监控表面上看起来很有希望,但只对个别过程设置限制,而不是对总体设置限制。

这些没有 GDI 总数:
*进程探索器
*系统资源管理器

这些没有 GDI:
*工具
*进程查看器
* 任务列表
* 任务管理器

答案1

有一个名为GDI视图。该工具可以转储到文本文件或 CSV。它具有每个进程的统计数据,因此您必须处理输出(powershell 可以处理这个),然后在总数超出限制时发出警报。

答案2

请参阅 @uSlackr 的答案,了解正确答案 GDIView 及其链接。我添加了第二个答案,以分享我编写的 Cygwin bash 脚本,用于跟踪总数并在超过一定数量时发出警报,以防对其他人有帮助。
此脚本每 INTERNAL(默认 120)秒回显时间和 GDI 总数。如果 GDI 总数超过 GDILIMIT(默认 10000),它会弹出一个消息框,还会回显前 15 个 GDI 用户,以便您查看谁在占用。谢谢 @uSlackr!

#! /bin/bash

INTERVAL=120
GDILIMIT=10000

for (( ; ; ))
do
/c/apps/gdiview/GDIView.exe /stab `cygpath -w $TMP/gdiview.txt`
gdi=`awk '{ SUM += $3} END { print SUM }' < $TMP/gdiview.txt`
echo -e `date +%H:%M` $gdi "\033]2;$(basename $0) $gdi\007"
if [ "$gdi" -gt "$GDILIMIT" ] 
then
  head -15 $TMP/gdiview.txt
  msg $USER "GDI is $gdi"
fi
sleep $INTERVAL
done

相关内容