0

我有一个实时应用程序,它通常在 2-5 毫秒内处理每个传入数据块,但有时会达到几十毫秒。我可以随心所欲地生成和重复输入数据序列,并证明峰值与特定数据块无关。

我的猜测是,因为 C++/Win32/MFC 代码也使用可变长度的 std:vectors 和 std::lists,所以它经常需要从操作系统获取内存,并且必须定期等待操作系统进行一些垃圾收集或某物。我该如何检验这个猜想?有没有办法调整内存分配以减少操作系统进程的影响?

上下文:将应用程序视为网络协议分析器,它实时收集数据并使其可供检查。数据“捕获”总是在最高优先级的线程中运行。

4

1 回答 1

1

测试的简单方法是不要将数据放入任何结构中。 消除你怀疑可能是问题的任何东西。您可能还认为延迟可能是操作系统将您的进程切换到上下文之外,以便为其他进程留出时间。

如果您将大量数据推送到向量上,使其不断增长,那么您将在调整向量大小时遇到​​周期性延迟。在这种情况下,延迟可能会变得更长且频率更低。缓解这种情况的一种方法是使用 adeque以块的形式分配数据,但放宽所有数据都在连续内存中的要求。

另一种解决方法是创建一个处理分配的后台线程,前提是您知道它可以比使用它的进程更快地分配内存。您不能为此直接使用标准容器。deque但是,您可以通过分配恒定大小的vector块或简单地使用传统的动态数组来实现类似于 a 的东西。这里的想法是,一旦你开始使用一个新的块,你就通知你的后台进程分配一个新的块。

以上所有内容都基于您需要存储所有传入数据的假设。如果您不需要这样做,请不要这样做。在这种情况下,这表明您的症状与将您退出的操作系统有关。您可以调查更改线程的优先级。

于 2013-07-29T03:23:11.537 回答