c# - 配置 Windows DNS 解析器缓存

标签 c# .net dns

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

我有一个 C# 程序可以执行大量 DNS 解析。因为 HTTPWebRequest 组件不允许我更改主机 header ,所以我无法创建自己的内部 DNS 缓存。所以我必须依赖 Windows DNS 缓存,它似乎无法更改。

有一个相当不错的 TechNet article关于 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 解析器缓存的大小?

最佳答案

使用这些设置,在网络上几分钟后,我看到了 1517 个缓存条目:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters]
"QueryIpMatching"=dword:00000001
"NegativeCacheTime"=dword:00000000
"NegativeSOACacheTime"=dword:00000000
"CacheHashTableBucketSize"=dword:00000001
"CacheHashTableSize"=dword:00000180
"MaxCacheEntryTtlLimit"=dword:00000e10
"MaxSOACacheEntryTtlLimit"=dword:0000012c

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"QueryIpMatching"=dword:00000001

关于c# - 配置 Windows DNS 解析器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/630790/

相关文章:

c# - 耗时/秒表

c# - 从没有一个字段的 Entity Framework 中检索对象

c# - 子任务与 WaitAll

facebook - Azure Web 应用程序 - 无法将主机名解析为有效的 IP 地址

java - 如何从 Tomcat url 中删除端口号?

c# - 当我创建 Code First 关系时只设置一个集合有什么区别

c# - 如何使用运行时发生变化的 WebElement?

c# - 滚动条不出现

C# HtmlEncode - ISO-8859-1 实体名称与数字

c - 即使发送成功,recv 函数也会卡住