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

问题描述 投票:0回答:2

问题:

我的问题是,如果我用

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

#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 计算机上可执行文件加载缓慢或更准确地延迟加载的原因是什么?如果我将所有大型结构从堆栈移动到堆,您认为它会修复吗?

c++ performance visual-studio-2010 memory-management windows-7
2个回答
6
投票

在现代计算中,没有多少事情需要花费分钟。 也不适用于具有嵌入式 Windows 版本的计算机。 不是处理器,不是 RAM,不是磁盘。

除了 one 之外,网络仍然基于 20 世纪 80 年代最后有效的假设。 TCP/IP 已成为唯一通用的协议。 但有一个缺陷,没有合理的方法来发现连接尝试可能需要多长时间。 因此,连接超时是基于绝对最坏的情况,尝试连接到地球另一端的机器,并与需要旋转鼓来加载程序的调制解调器连接。

Windows 上的

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

通过

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


0
投票
如果您的应用程序加载缓慢或延迟,请尝试以下步骤:

优化代码:检查代码是否存在效率低下、不必要的循环或大型数据库查询的情况。

减少资源使用:最大限度地减少应用程序加载的图像、脚本和其他资源的大小。

检查服务器性能:确保您的服务器有足够的资源(CPU、RAM)。如果 RAM 使用率很高,请考虑

使用 Mem Reduct 更好地管理内存并释放空间以实现更流畅的操作。

使用缓存:实施缓存策略,将频繁数据存储在本地,减少服务器负载。

更新依赖项:过时的库或框架可能会降低性能。让他们保持更新。

这些步骤以及 Mem Reduct 等内存管理工具应该有助于提高应用程序的加载速度。

© www.soinside.com 2019 - 2024. All rights reserved.