gpt4 book ai didi

c++ - 我的应用程序加载缓慢或延迟

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

问题:

我的问题是,如果我用 foo2 替换下面的 foo1(我的代码中有)这样的函数,会对我的应用程序内存占用或性能产生什么影响。该函数在应用中被频繁调用。

#define SIZE 5000

void foo1()
{
double data[SIZE];
// ....
}

void foo2()
{
std::unique_ptr< double[] > data( new double[SIZE] );
// ....
}

上下文:

在实现新功能/模块后,我的 MFC 应用程序在运行 Windows 7 的嵌入式设备上加载速度非常慢。同样的应用程序在 PC 上加载速度很快。至少其中一个差异和我怀疑的原因是嵌入式单元上的 RAM 非常低,只有 768 MB。

我调试它以找出这种延迟发生在哪里,并在加载过程中记录了应用程序中的时间戳。我的发现很有趣。当我双击 exe 时,记录第一个时间戳大约需要一分钟,之后它运行得很快,所以所有的延迟都在那里。

我的理论是,windows 一直在为 exe 设置环境,一旦完成,它运行得很快。我怀疑这是因为在应用程序的堆栈上声明了很多大结构,以至于我不得不将其中一些结构移到堆中以消除堆栈溢出错误,即使在具有新功能的 PC 上也是如此。

您认为在低 RAM 机器上加载可执行文件缓慢或更准确地延迟加载的原因是什么?如果我将所有大型结构从堆栈移动到堆,您认为它会解决吗?

最佳答案

在现代计算中,花费 分钟 的事情并不多。也不在具有嵌入式 Windows 版本的计算机上。不是处理器,不是 RAM,不是磁盘。

除了一个,网络仍然基于 1980 年代最后一次有效的假设。 TCP/IP 已成为唯一常用的协议(protocol)。但有一个缺陷,没有合理的方法来发现连接尝试可能需要多长时间。因此,连接超时是基于绝对最坏的情况,尝试连接到地球另一端的机器,连接到需要启动鼓以加载程序的调制解调器。

Windows 上的最小 超时设置为 45 秒。而且,一般来说,这种情况在嵌入式机器中肯定不是不可能的。您可能已将它连接到网络以对其进行初始化,但它不再连接,或者您从中复制的机器可能不再通电。

通过首先 查找断开连接的磁盘驱动器来追查它,这很常见。接下来使用 SysInternals 的实用程序(如 TcpView)来查找网络事件,例如尝试连接到 CRL 服务器。使用 Process Explorer 找出程序卡住的位置。 Mark Russinovich 的博客非常适合展示他使用这些工具的故障排除策略。祝你好运。

关于c++ - 我的应用程序加载缓慢或延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020905/

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