用户分配的示例支持

[与此页面关联的功能(Windows Media Format 11 SDK)是一项旧功能。 它已由源读取器接收器编写器所取代。 源读取器接收器编写器 已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft 强烈建议新代码在可能的情况下使用 源读取器汇点写入器 代替 Windows Media Format 11 SDK。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]

在正常情况下,读取器对象和同步读取器对象都会为传递到应用程序的每个示例创建新的缓冲区对象。 这是因为读取模块无法知道应用程序在获取示例后如何处理这些示例。 尽管许多应用程序只读取示例来立即呈现它们,但某些应用程序可能需要长时间维护示例。 因此,读取对象不能重复使用它分配的任何缓冲区;它会将它们传递到应用程序,然后可以控制它们。

此方法的问题是,文件可以包含大量示例。 如果其中每个对象都需要创建新的缓冲区对象,则大量处理器时间会浪费分配和释放内存。 在时间敏感的应用程序(如媒体播放器)中,这种开销可能会非常不利于性能。

为了缓解读取器分配的样本的性能问题,读取器和同步读取器都支持用户分配的示例。 若要使用应用程序分配的示例,读取对象会调用你实现的示例分配回调方法。 回调用于将缓冲区传递到读取对象的逻辑完全由你决定。 可以为整个文件使用一个缓冲区池,也可以使用多个缓冲区池、每个输出或流使用一个缓冲区池,或者适用于应用程序的任何其他方案。

分配用于文件读取 的缓冲区

文件读取功能