设置如下:一个 winform 应用程序,visual studio 2019,创建 16 个 videoview/mediaplayer 实例,每个实例从多播摄像机流式传输 960 X 540 30fps 摄像机流。
CPU i7 2.67GHz,GPU NV GTX 1650。
GPU 加载高达 44% 的解码和 3d 大致相同。该应用程序使用了惊人的 75% 到 90% 的 CPU。从一次测试运行到另一次测试运行时,它跳了很多。GPU非常稳定。
这里还有一些有趣的信息。如果我使用一个视频流运行此应用程序的单个副本,则 CPU 使用率约为 CPU 的 5/10%。如果我运行 16 个应用程序实例,每个实例使用大约 4/10 到 8/10% 的 CPU。一旦我有 16 个视频流,GPU 与上面相同(44%),CPU 是标称的。
在添加摄像头时,一个实例中 CPU 使用率的增加不是线性的,它在 9 之后会有很大的跳跃。从下面的诊断图像中,您可以看到使用情况几乎完全隔离在 Native 代码中。其他图表显示大约 2/3 在内核中和 1/3 在系统 IO 中。CPU 非常均匀地分布在所有内核上。
我已经尝试了很多变体,但无论我尝试什么,一旦我达到 16 个通道,CPU 使用率就会非常稳定。我尝试在自己的线程中运行每个实例。那没什么区别。我真的很想了解这一点并找到一种降低 CPU 使用率的方法。我有一个使用这项技术的应用程序和一个需要超过 16 个通道的客户。