Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接到MSSQL总是需要2秒钟_C#_Sql Server - Fatal编程技术网

C# 连接到MSSQL总是需要2秒钟

C# 连接到MSSQL总是需要2秒钟,c#,sql-server,C#,Sql Server,我将MSDN示例用于System.Data.SqlClient.SqlConnection。在MSSQL实例所在的计算机上运行可执行文件时,一切正常,conn.Open() string connString = "server=WIN-8MHRO21AMIN\\MYINSTANCE;Initial Catalog=mydb;User ID=sa;Password=xxxxxx;Connection Timeout=30"; string query = "SELE

我将MSDN示例用于System.Data.SqlClient.SqlConnection。在MSSQL实例所在的计算机上运行可执行文件时,一切正常,
conn.Open()

string connString = "server=WIN-8MHRO21AMIN\\MYINSTANCE;Initial Catalog=mydb;User ID=sa;Password=xxxxxx;Connection Timeout=30";
string query = "SELECT 2+2;";
using (SqlConnection conn = new SqlConnection(connString))
{
    var dtStart = DateTime.Now;
    conn.Open();
    Console.WriteLine($"Connected: {DateTime.Now - dtStart}");

    using (var cmd = new SqlCommand(query, conn))
    {
        SqlDataReader Reader = cmd.ExecuteReader();
    }
}
但是当从远程机器运行时,连接总是至少需要2秒钟,再加上一些更改。在这里,我运行可执行文件5次。第一个由于冷启动而缓慢,后续运行相当稳定

Connected: 00:00:05.6271518
Connected: 00:00:02.0243444
Connected: 00:00:02.0248543
Connected: 00:00:02.0238635
Connected: 00:00:02.0248544 
在Wireshark中查看exchange时,它看起来不像是服务器的故障。客户端发送一些DNS请求,服务器立即响应,然后客户端在整整一秒钟内不执行任何操作,然后发送UDP请求,服务器再次响应,客户端再等待一秒钟,最后开始与实际数据负载的TCP对话。那么等待什么呢

从连接字符串中删除连接超时参数后,情况更糟。同样可以通过将其设置为16或更少(?)来实现

conn.Open()现在持续至少需要3.1秒。在2秒的时候,有一些TCP会话正在进行,但是客户端过早地停止它,等待1.1秒,然后重新开始。这是如何由连接超时引起的超出了我的理解

有没有办法在每次运行应用程序时将conn.Open()的范围保持在100ms

客户机是Win10。我尝试用.NET framework 4、4.5、4.7.2编译该项目,结果相同。NETFramework3和.NETCore3.1没有表现出连接超时的魔力,但在每种情况下都需要2秒钟

服务器机器是Win7,SQL Express 2014 SP2,在VMware工作站内运行。防火墙已禁用


更新:是的,这是一个DNS问题,通过IP地址连接是即时的。

看起来像是一个DNS问题。如果直接通过服务器IP地址连接,会发生什么?尝试调整连接池选项。这些MDN/LLMNR查询不是我在常规网络上所期望的,尤其是因为它们似乎重复出现(当您希望在一次之后完成查找时)。如果连接到
win-8mhro21amin.local\MYINSTANCE
有任何区别,您可以尝试(服务器的FQDN,假设是正确的,并且服务器本身不相信其他内容)可选地添加<代码> TCP:只考虑一个网络连接,虽然我不认为这是问题。当有疑问时,执行Evk所说的。这将立即告诉您它是否是DNS问题(我猜它是)。
Connected: 00:00:03.1286925
Connected: 00:00:03.1286923
Connected: 00:00:03.1276323
Connected: 00:00:03.1296922
Connected: 00:00:03.1296835