Winsock closesocket()性能(本地计算机,127.0.0.1):为什么它在某些计算机上如此慢,而在其他
本文关键字:计算机 其他 性能 closesocket 为什么 Winsock | 更新日期: 2023-09-27 18:10:40
我正在努力解决与c#代码中关闭数据库连接相关的奇怪性能问题。我们在本地计算机上使用名为Raima的数据库服务器(只有本地TCP连接127.0.0.1到同一台计算机上的本地数据库服务器,而不是通过LAN),通过其本地Raima API(不是ADO)。.NET,只是一个。NET包装器)。
问题是,在许多计算机上(高性能双核或四核计算机),关闭大约需要120ms-250ms(例如,在。net c# web服务中需要120ms,在。net c# Windows应用程序中需要250ms),而在其他计算机上只需要4ms(稳定)。让我感到困惑的是,在一些计算机上,例如,大多数时候是120ms,但偶尔它可能会跳到4ms。
我们的数据库供应商(Raima)告诉我们他们对此无能为力,因为这些减速是由Winsock方法closeocket()引起的。
所以我的问题是,Winsock closesocket()可能会导致本地计算机上的这些类型的减速,这是真的吗?或者,归根结底,这只是数据库供应商和他们缓慢的数据库驱动程序/服务器的问题?
谢谢!
我建议你使用性能工具/无压力工具测试你的raima;使用网络工具测试你的网络;使用其他数据库(免费版的SQL server, IBM DB2, MySQL, Oracle等)安装您的计算机,并尝试连接它并计算其性能。我想它不是winsock实现,它是计算机配置。如果所有的数据库都变慢了,那么你可以怀疑winsock。如果一切都很慢,也许你可以提一下升级硬件。如果除了赖玛都是快的。你可以怀疑raima数据库很慢。如果你有连接困难,像往常一样断开连接,只需更换你的局域网电缆。
我是来自Raima的Jason。希望您在2011年收到了我们关于此问题的电子邮件,但是对于任何遇到此性能问题的人,我们将解释如何解决此问题:
性能问题出现在closesocket()中,并解释说我们对此无能为力。紧接着,我们的一个工程师发现我们使用了SO_LINGER选项,这会导致closeocket()阻塞,直到所有未完成的数据都被发送后才返回。我们删除了这个选项,并在2011年10月11日发布了补丁。关闭SO_LINGER后,closeocket()函数仍将在关闭套接字之前发送未完成的数据,但它可能在此操作完成之前返回。