c++ - 从 Visual Studio 启动时,发布构建比“正常”启动时更快
问题描述
我有一个用于可视化工件的 Qt 应用程序。因此我们使用 Qt 的 OpenGL 接口QGLWidget
。在这个应用程序中,我们有时必须加载和可视化大量数据(高达 4GB 的 3D 双点)。然后应用程序变慢,但这并不重要,因为性能不是这里真正的问题。渲染一帧通常需要大约 100 毫秒。
我们正在解决的问题如下: 在那一刻,当程序创建大量数据并且我们已经加载它时,我们通常需要大量的 RAM。从 Visual Studio 启动应用程序时,内存分配比“正常”启动时快很多。
在任务管理器中,我可以看到,增加所需内存的速度非常不同。虽然一个应用程序可以在一秒钟内分配大约 1GB 的内存,但另一个应用程序每秒只能分配大约 50MB。
我的问题是,从 Visual Studio 启动应用程序有什么区别?两次,我们都使用 VS 的“默认”发布版本。什么会引发此类问题,我如何确定这些问题的根源?
附加信息:此应用程序基于 Qt5。这个应用程序有一个 10 年前的版本,使用 Qt3 和 Qt4 编程。我们不再拥有此应用程序的来源。当使用 Qt3/4 时,我们不会处理这些问题。旧应用程序的行为似乎与使用 VS 启动 Qt5 应用程序时相同。
我们正在使用 Visual Studio 2015 和 Qt5.9.1
我跟踪了 CPU 使用率和内存使用率:
你可以看到,第一个内存大小的增加比第二个快得多。
解决方案
事实证明,您看到的不同之处在于,当附加了调试器时,操作系统/调试器将锁定一些页面,以便调试器可以立即使用它们。这是一个例外情况,因为您附加了一个调试器,一般不建议这样做。我相信没有快速解决办法——也许只能以不同的方式使用 opengl。
另请参阅可能具有相同原因的此答案:
推荐阅读
- rest - 使用 Mule SDK 调用外部 API
- javascript - 如何在执行函数时保留从我的状态操作的对象数组的顺序
- android - 当 AlarmManager 触发并触发 BroadCastReceiver onReceive 时打开手机屏幕
- python - 为什么协议必须以大端顺序发送到套接字函数而其余参数则不是?
- macos - Mach-O - LINKEDIT 部分字节序
- python - 单击 tkinter 中的按钮后如何生成另一个图?
- python - 使用列相互比较两个不同的数据框
- visual-studio - 如何在 .NET CORE 版本 3.1 上安装 SignalR 库
- python - 使用 BeautifulSoup 和 Requests 提取 Facebook 帖子和评论
- vue-select - 如何使用 vue-select reduce prop 将值归约为对象