用户分配的示例支持
[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
在正常情况下,读取器对象和同步读取器对象都会为交付给应用程序的每个示例创建一个新的缓冲区对象。 这是因为读取对象在获取示例后无法知道应用程序对示例执行的操作。 尽管许多应用程序只读取示例以立即呈现它们,但某些应用程序可能需要长时间维护示例。 因此,读取对象不能重用它分配的任何缓冲区;它会将它们传送到应用程序,然后应用程序可以控制它们。
此方法的问题在于文件可能包含大量样本。 如果其中每一个都需要创建新的缓冲区对象,则分配和释放内存会浪费大量处理器时间。 在媒体播放器等时间敏感型应用程序中,这种开销可能会非常不利于性能。
为了缓解读取器分配的样本的性能问题,读取器和同步读取器都支持用户分配的示例。 若要使用应用程序分配的示例,读取对象会调用你实现的示例分配回调方法。 回调用于将缓冲区传递到读取对象的逻辑完全由你决定。 可以将缓冲区池用于整个文件,也可以使用多个缓冲区池,每个输出或流使用一个缓冲区池,或适用于应用程序的任何其他方案。
相关主题