配置 Windows DNS 解析器缓存

Jim*_*hel 6 domain-name-system windows cache

几个月前我在 Stack Overflow 上问过这个问题,但没有得到任何有用的答案。也许这里有人有更好的信息。

请注意,我说的是客户端 DNS 解析器缓存。此消息与 Windows DNS 服务器无关。

我有一个 C# 程序,可以进行很多 DNS 解析。因为该HTTPWebRequest组件不允许我更改 Host 标头,所以我无法创建自己的内部 DNS 缓存。所以我必须依赖 Windows DNS 缓存,它似乎无法更改。

一篇关于 Windows Server 2003 中的 DNS 缓存注册表设置的相当不错的TechNet 文章,但我无法证明在 XP、Server 2003、Vista 或 Server 2008 中设置它们有任何作用。我通过所有其他页面找到的谷歌搜索要么引用该页面,要么对其进行解释,有时是错误的。

Windows 的ipconfig命令有一个/displaydns开关,可以输出缓存的内容。据我所知,这是确定 DNS 缓存大小的唯一方法。在我对具有 2 GB 内存的 32 位 Windows XP 机器上进行的实验中,无论我将 DNS 缓存注册表值设置为什么,我最终都会在缓存中得到 30 到 40 个项目——即使在进行了数千次 DNS 解析之后. 在具有 16 GB 内存的 64 位 Windows 2008 机器上,我的缓存中总是有 270 到 300 个项目。

我难住了。我不知道答案是什么,但我认为是以下情况之一:

  1. 无法更改 DNS 解析器缓存的大小。
  2. 这是可能的,但文档是错误的。
  3. 就文档而言,它是正确的,但它是不完整的。
  4. 文档是正确和完整的,但我太笨了,无法理解它。
  5. 记录的注册表项实际上改变了缓存的大小,但ipconfig没有向我显示缓存中的所有条目。

谁能告诉我是否可以在 Windows XP、Vista 或 Server 2008 中配置 DNS 解析器缓存的大小?

Sco*_*MVP 0

我还没有尝试更改 DNS 客户端上的设置,因此我无法对此进行讨论,但我建议在重新启动服务时运行 processmon (www.sysinternals.com)。您应该会看到任何读取注册表项的尝试。它会准确地告诉您它正在尝试访问哪个注册表项和项目。这应该与文档相符,但如果不相符,它有望告诉您出了什么问题。