上一篇文章介绍了句柄的基本概念,也描述了C#中创建文件句柄的过程。我们已经知道句柄代表Windows内部对象,文件对象就是其中一种,但显然系统中还有更多其它类型的对象。本文将简单介绍Windows对象的分类。 句柄可以代表的Windows对象分为三类,内核对象(Kernel Object)、用户 ...
在上篇文章.NET对象与Windows句柄 二 :句柄分类和.NET句柄泄露的例子中,我们有一个句柄泄露的例子。例子中多次创建和Dispose了DataReceiver和DataAnalyzer对象,但由于忘记调用DataAnalyzer的Stop方法,导致产生句柄泄露。本文假定我们已经发现了泄露现象但还不知道原因,讨论如何在这种情况下分析问题。 一 发现问题 在程序运行约一个小时以后,通过任务管 ...
2016-04-13 23:05 5 2427 推荐指数:
上一篇文章介绍了句柄的基本概念,也描述了C#中创建文件句柄的过程。我们已经知道句柄代表Windows内部对象,文件对象就是其中一种,但显然系统中还有更多其它类型的对象。本文将简单介绍Windows对象的分类。 句柄可以代表的Windows对象分为三类,内核对象(Kernel Object)、用户 ...
句柄泄露实例分析 在上篇文章.NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子中,我们有一个句柄泄露的例子。例子中多次创建和Dispose了DataReceiver和DataAnalyzer对象,但由于忘记调用DataAnalyzer的Stop方法,导致产生句柄泄露 ...
在.NET编程中,得益于有效的内存管理机制,对象的创建和使用比较方便,大多数情况下我们无须关心对象创建和分配内存的细节,也可以放心的把对象的清理交给自动垃圾回收来完成。由于.NET类库对系统底层对象进行了封装,我们也不需要调用Windows API来操作非托管对象。但不直接操作非托管对象,并不 ...
本人系统是win7 64位,待调试程序是32位。这里使用的方法是真机配合虚拟机同时调试的方法来找出句柄泄露的源码位置。 如果真机直接使用X64版本的windbg侦测句柄泄露时显示: 如果真机直接使用X86版本的windbg侦测句柄泄露时显示: 总之两个 ...
一、设立句柄的原因 windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。 Windows是一个以虚拟内存为基础的操作系统,很多时候,进程 ...
在Java里,任何东西都可看作对象。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle),有的人将其称作一个“引用”,甚至一个“指针”。 主类型的数据成员可直接初始化,是变量,不是句柄。 String s; 创建的只是句柄,并不是对象 ...
设置 GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,将其调整为大于默认的10000的值。如果您的系统配置了2G或更多内容,不妨将其设置为允许的最大值 16384(10进制 ...
谈windows中的句柄 每当一个进程打开一个对象,系统就返回一个句柄作为凭证,由此可以想到,句柄是依赖于具体的进程的,换句话说,句柄一定属于某个进程,以后在访问这个对象时就要使用这个凭证! 所以句柄还可以认为是一个进程和一个对象之间建立的一种连接,一座桥梁,一个 ...