首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DuplicateHandle的价格

DuplicateHandle的价格
EN

Stack Overflow用户
提问于 2009-11-16 18:37:27
回答 2查看 617关注 0票数 1

我正在编写一个类库,它为C API (即Windows注册表)提供了方便的面向对象的前端。但是,我很好奇,对于复制我的HREG类的实例,处理key类的最佳操作是什么。

我也可以

  1. 分配堆整数并将其用作引用计数。在句柄上调用RegCloseKey(),并在参考计数为零时释放整数。
  2. 使用句柄的内置功能,而不是维护引用计数,在复制注册表键对象时调用DuplicateHandle()。然后总是在析构函数中调用RegCloseKey .

DuplicateHandle()设计要简单得多,但我担心这样的设计会严重影响应用程序的性能。因为我的应用程序通过成千上万的键进行递归,所以复制这个对象的速度是一个敏感的问题。

DuplicateHandle()函数的固有开销是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-16 18:45:11

我想你会发现DuplicateHandle的开销很小。内核已经为每个打开的对象管理一个引用计数,DuplicateHandle为目标进程向内核句柄表添加了一个新条目,并增加了对象引用计数。(DuplicateHandle通常也进行安全检查,但如果源进程和目标进程相同,则可以跳过安全检查。)

如果您同时打开数十万个对象,您可能会遇到困难,这取决于Windows有多少个句柄想让您打开。

票数 1
EN

Stack Overflow用户

发布于 2009-11-16 18:44:22

我从来没有遇到过DuplicateHandle()有意外开销的任何暗示。

我怀疑一些科学实验是为了证实这一点。一定要在几个平台上这样做,因为这是微软可能在没有警告的情况下改变的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1744016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档