gpt4 book ai didi

c++ - 程序在我的机器上运行 2 秒,但在其他机器上运行 15 秒

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:57 27 4
gpt4 key购买 nike

我有两个使用 Winsock 的 C++ 程序。它们都接受 TCP 连接,一个发送数据,另一个接收数据。它们是在 Visual Studio 2008 中编译的。我还有一个用 C# 编写的程序,它连接到两个 C++ 程序并转发它从一个程序接收的数据包并将它们发送到另一个程序。在此过程中,它会计算并显示转发的数据包数。此外,还会显示从第一个数据包到最近数据包耗时。

发送数据包的 C++ 程序简单地循环 1000 次发送完全相同的数据。当我在我的开发机器上运行所有三个应用程序时(使用环回或实际 IP),数据包在大约 2 秒内通过整个系统运行。当我在我们实验室的任何其他 PC 上运行所有这三个时,它总是需要 15 到 16 秒。每台 PC 都有不同的处理器和内存量,但它们都运行 Windows XP Professional。我的开发 PC 实际上有一个较旧的 AMD Athlon,它的内存是执行此任务所需时间更长的机器之一的一半。我在我的机器和另一台机器上的任务管理器中查看了 CPU 时间图,在这些程序运行时,它们都没有使用大量处理器(即超过 10%)。

有人有什么想法吗?我只能想到在目标机器上安装 Visual Studio,看看它是否与此有关。

问题解决 ============================================= =======

我首先安装了 Visual Studio 以查看它是否有任何效果,但没有。然后我在我的新开发 PC 上测试了这些程序,它的运行速度和我的旧电脑一样快。在 Vista 笔记本电脑上运行程序再次产生 15 秒。

我在服务器程序中某些指令的两边打印了时间戳,以查看哪条指令花费的时间最长,我发现延迟是由 1 毫秒的 Sleep() 方法调用引起的。显然,在我的新旧系统上,Sleep(1) 被忽略了,因为我会在同一毫秒内发送 10 到 >20 个数据包。有时我会在大约 15 或 16 毫秒的执行过程中中断,这导致 1000 个数据包的时间大约为 2 秒。在运行 1000 个数据包大约需要 15 秒的系统上,我在发送每个数据包之间会有 15 或 16 毫秒的间隔。

我注释掉了 Sleep() 方法调用,现在数据包立即发送。感谢您的帮助。

最佳答案

您应该根据好的、2 秒的案例和 15 秒的实验室案例来分析您的应用程序,看看它们有什么不同。差异可能是由于许多问题(磁盘、防病毒、网络)造成的——如果没有任何数据支持,我们就只能在黑暗中摸索。

如果您无权访问分析器,则可以将计时工具添加到程序的各个阶段,以查看哪个阶段花费的时间更长。

关于c++ - 程序在我的机器上运行 2 秒,但在其他机器上运行 15 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com