C# Winsock closesocket()性能(本地计算机,127.0.0.1):为什么它在某些计算机上运行得如此缓慢,而在其他计算机上运行得非常快?

C# Winsock closesocket()性能(本地计算机,127.0.0.1):为什么它在某些计算机上运行得如此缓慢,而在其他计算机上运行得非常快?,c#,database,performance,sockets,winsock,C#,Database,Performance,Sockets,Winsock,我正在努力解决一个奇怪的性能问题,这个问题与在我的C代码中关闭数据库连接有关。我们在本地计算机上使用名为Raima的数据库服务器,仅本地TCP连接127.0.0.1连接到同一计算机上的本地数据库服务器,而不是通过其本地Raima API跨LAN,而不是ADO.NET,只是一个.NET包装器 问题是,在许多计算机上—高性能双核或四核计算机—关闭大部分时间大约需要120ms-250ms,例如在.NET C web服务中需要120ms,在.NET C Windows应用程序中需要250ms,而在其他计

我正在努力解决一个奇怪的性能问题,这个问题与在我的C代码中关闭数据库连接有关。我们在本地计算机上使用名为Raima的数据库服务器,仅本地TCP连接127.0.0.1连接到同一计算机上的本地数据库服务器,而不是通过其本地Raima API跨LAN,而不是ADO.NET,只是一个.NET包装器

问题是,在许多计算机上—高性能双核或四核计算机—关闭大部分时间大约需要120ms-250ms,例如在.NET C web服务中需要120ms,在.NET C Windows应用程序中需要250ms,而在其他计算机上,关闭只需要4ms。让我困惑的是,在一些计算机上,例如,它的大部分时间是120毫秒,但偶尔它可能会跳到4毫秒

我们的数据库供应商Raima告诉我们,他们对此无能为力,因为这些减速是由Winsock方法closesocket造成的

所以我的问题是Winsock closesocket是否真的会导致本地计算机上出现这种速度减慢?或者,归根结底,这仅仅是关于数据库供应商和他们缓慢的数据库驱动程序/服务器


谢谢

我建议您使用性能工具/压力测试工具测试您的raima(您称之为raima);使用网络工具测试你的网络;使用其他SQL server、IBM DB2、MySQL、Oracle和其他无数据库版本安装计算机,并尝试连接它并计算其性能。 看来这不是winsock实现,而是计算机配置。如果所有数据库都在减速,那么您可能会怀疑winsock。 如果一切进展缓慢,也许你可以提到升级硬件。 如果除了雷玛,其他人都很快。您可能会怀疑raima数据库运行缓慢。 如果你像往常一样在连接上有困难,比如断开连接,只需更换你的局域网电缆

我的名字叫杰森。希望您能在2011年收到我们关于此问题的电子邮件,但对于其他遇到此性能问题的人,我们将解释如何解决此问题:


性能问题出现在closesocket中,并解释说我们对此无能为力。紧接着,我们的一位工程师发现我们正在使用SO_LINGER选项,这会导致closesocket阻塞,直到发送完所有未处理的数据后再返回。我们删除了此选项,并于2011年10月11日发送了修补程序。关闭SO_LINGER后,closesocket函数仍将在关闭套接字之前发送未完成的数据,但它可能会在该操作完成之前返回。修补程序在大多数情况下都能提高性能。

对此没有一般性的答案,但性能肯定取决于几个方面,如NIC驱动程序、Windows版本、空/满TCP/IP缓冲区、一些与NIC-/TCP相关的注册表设置等。嘿,只是一个提示,但是为什么不把你的名字Jason添加到你的个人资料中,这样你的用户卡上就会显示Jason而不是user1272893呢?会看起来更专业我看到你代表你的公司发布了一大堆答案,所以我想我应该指出这一点