DirectX 媒体对象 (DMO) documentation 建议,为了效率起见,保存媒体样本(支持 IMediaBuffer
接口(interface))的缓冲区应该被合并,而不是不断地创建/销毁:
现在 DMO 已被 Media Foundation Transforms (MFT) 取代,我在文档中找不到相同的建议。 在管理等效缓冲区对象(这次实现 IMFMediaBuffer
接口(interface))时,是否仍应考虑这种池化策略?
最佳答案
池化策略仍然降低了整体性能开销,但有一些重要的事情需要记住:
MFCreateSample
等函数级 API 实现池化:该 API 返回在 API 管理的样本对象内部池 也就是说,即使您不进行池化,您仍然可以免费获得一些池化,并且 API 本身可以帮助您处理诸如此类的小事。当然,您用于准确资源管理的合理方法仍然有意义并且不会受到伤害,尤其是文档并没有详细说明它是如何进行优化的。
此外,COM 对象池实现的一个很好的例子是 DirectShow 的
CMemAllocator
实现,该实现包含在\Samples\multimedia\directshow\baseclasses\amfilter.h 中的 Windows SDK 7.x 示例中关于c++ - 我还应该池化 IMFMediaBuffer 对象吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39336662/