我正在编写一个类库,它为C API (即Windows注册表)提供了方便的面向对象的前端。但是,我很好奇,对于复制我的HREG
类的实例,处理key
类的最佳操作是什么。
我也可以
DuplicateHandle()
。然后总是在析构函数中调用RegCloseKey .DuplicateHandle()
设计要简单得多,但我担心这样的设计会严重影响应用程序的性能。因为我的应用程序通过成千上万的键进行递归,所以复制这个对象的速度是一个敏感的问题。
DuplicateHandle()
函数的固有开销是什么?
发布于 2009-11-16 18:45:11
我想你会发现DuplicateHandle的开销很小。内核已经为每个打开的对象管理一个引用计数,DuplicateHandle为目标进程向内核句柄表添加了一个新条目,并增加了对象引用计数。(DuplicateHandle通常也进行安全检查,但如果源进程和目标进程相同,则可以跳过安全检查。)
如果您同时打开数十万个对象,您可能会遇到困难,这取决于Windows有多少个句柄想让您打开。
发布于 2009-11-16 18:44:22
我从来没有遇到过DuplicateHandle()
有意外开销的任何暗示。
我怀疑一些科学实验是为了证实这一点。一定要在几个平台上这样做,因为这是微软可能在没有警告的情况下改变的。
https://stackoverflow.com/questions/1744016
复制相似问题