配置Windows DNS解析程序缓存

Jim*_*hel 7 .net c# dns

请注意,我在谈论客户端DNS解析器缓存.此消息与Windows DNS服务器无关.

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

有一篇相当不错的TechNet文章关于Windows Server 2003中的DNS缓存注册表设置,但我无法证明设置它们可以做任何事情.我通过Google搜索找到的所有其他页面都引用该页面,或者有时会错误地解释它.

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解析器缓存的大小?

Nic*_*ver 0

默认情况下,缓存的最小 TTL 为 1 天,我已经尝试过它,但默认情况下我相信默认情况下注册表项不存在。

这是您正在寻找的密钥,至少在 XP 中是这样:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters

您需要添加 DWORD MaxCacheTtl - 这将更改存储在解析器缓存中的最小 TTL。

由于它默认为 86,400(值以秒为单位,默认 = 1 天),因此任何短于此的内容都不会被缓存。如果将其降低到 300,您会看到客户端上缓存了更多内容。