为什么OleDbConnection.Close方法在使用Microsoft ACE驱动程序时执行TCP发送调用?

时间:2017-02-13 17:31:55

标签: c# .net ms-access oledbconnection

我的公司使用.NET OleDbConnection对象对各种Access数据库进行了大量工作。我们在本地机器上与他们合作。 2017年2月13日星期五,事情有点奇怪。除了调用Close()之外,一切都运行得很快。我花了大部分时间来讨论这个问题,对我而言,这个问题归结为嵌入在.NET框架中的奇怪TCP发送。

基本上,我运行了SysInternals Process Monitor,然后运行了一段代码,1)打开连接,2)填充DataTable,然后3)关闭连接。进程监视器显示TCP发送和接收之间的延迟为6-7秒,延迟到3个随机IP地址之一。使用网络搜索IP Block和每个地址,它们似乎都归Microsoft所有并与Windows Azure相关。地址是:

  • 40.76.62.115
  • 23.96.219.115
  • 40.86.88.112

IP地址在应用程序的生命周期内保持不变。如果我关闭并重新打开程序,我有时会得到一个不同的地址,但6-7秒的延迟保持不变。这只发生在使用ADO.NET和ACE驱动程序时。在C ++中使用经典ADO和ACE驱动程序没有进行TCP发送,而JET驱动程序在ADO.NET或经典ADO中都没有这样做。

那么,为什么在我的计算机本地代码中嵌入TCP发送,并在同一台计算机上与Access数据库进行通信呢?

请注意,当我拉动以太网电缆并运行代码时,它在TCP发送时进行了多次尝试,但它没有等待接收。似乎有几个记录在案的情况,但没有实际答案:

修改:我已向Microsoft提交了有关此here的错误报告。

0 个答案:

没有答案