问题
我正在使用OpenGL开发一些程序地形生成。作为IDE,我正在使用Microsoft VS2017。我可以毫无问题地运行"实验"。但是经过大约两个小时的开发,该程序减慢了。在十分钟左右的时间内,帧率从100多个下降到20。启动程序时,要加载着色器并链接程序需要永恒。
可能的原因
在VS2017内进行了调试和分析后,事实证明,超过98%的CPU正在等待GPU完成着色器统一的动作。这包括找到统一变量的位置并将三个矩阵加载到均匀变量。
故障排除步骤
我已经尝试了各种不同的事情来改善情况,包括以下情况,但是我无法在不重新启动计算机的情况下解决问题
- 复制.exe和资产到另一个文件夹
- 复制.exe和资产到另一个物理部门
- 重新启动VS2017
- 减少MSI Afterburner中的GPU和内存时钟
- 检查图形卡VRAM用法
- 紧密的背景应用程序
我的计算机
如果此信息对某人有所帮助,则是:
- 英特尔©core©i5-6600k @3,5GHz
- evga geforce GTX 1060 6GB GDDR5
- MSI Z170-A Pro
- 2x8GB DDR4-2133
- Thermaltake 530W PSU
- RAID1中的2x1TB HDD(在其上有项目(
- 128GB SSD
- 512GB HDD
预先感谢Elias
所有"故障排除"步骤都是Voodoo。您使用哪个IDE都没关系(无论如何,这只是一个荣耀的编辑(。在您的可执行文件中,在文件系统中的位置都没关系(它只是存储设备的块,页面映射到OS(。如果您遇到热问题,则减少GPU和/或内存时钟有助于稳定性,但不会影响这种蠕动的性能问题(如果存在热问题,您会在几分钟内注意到它,而不是小时(。
系统运行一段时间后的性能突然下降几乎总是归因于资源耗尽,从而迫使系统交换数据。资源耗尽的原因是分配管理不当,即分配某些东西与释放某些东西之间的不平衡。
这是您必须调试的内容。对于OpenGL,每个glGen…
/glCreate…
必须通过匹配的glDelete…
平衡。对于您的代码中new
的每一次使用,都必须有一个平衡的delete
(对于new …[]
,必须有一个delete[] …
(。
如果将对象推入容器中(例如std::vector
,std::list
,std::map
等(,请确保您还执行垃圾,即处置您不再使用的对象。