我正在编写一个类库,该类库为Windows注册表的C API提供了方便的面向对象的前端。但是,我很好奇,对于复制HREG
类的实例,处理key
的最佳方法是什么。
我可以
DuplicateHandle()
。然后始终在析构函数中调用RegCloseKey。 DuplicateHandle()
设计要简单得多,但是我担心这样设计是否会严重影响应用程序的性能。因为我的应用程序通过成千上万的键递归,所以复制该对象的速度是一个敏感的问题。DuplicateHandle()
函数的固有开销是多少? 最佳答案
我怀疑您会发现DuplicateHandle的开销很小。内核已经为每个打开的对象管理了一个引用计数,DuplicateHandle向内核句柄表中添加了一个用于目标进程的新条目,并增加了对象引用计数。 (DuplicateHandle通常也进行安全检查,尽管如果源进程和目标进程相同,则它可能会跳过。)
如果同时打开数十万个对象,可能会遇到麻烦,具体取决于Windows允许您打开多少个句柄。
关于c++ - DuplicateHandle的价格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1744016/