【发布时间】:2019-02-08 18:32:29
【问题描述】:
我有一个使用 AudioGraph API 的 C# UWP 应用程序。
我在MediaSourceAudioInputNode 上使用自定义效果。
我按照此页面上的示例进行操作: https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/custom-audio-effects
它可以工作,但是当自定义效果运行时,我可以在扬声器中每秒听到多次点击声。
这是我的ProcessFrame 方法的代码:
public unsafe void ProcessFrame(ProcessAudioFrameContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
AudioFrame frame = context.InputFrame;
using (AudioBuffer inputBuffer = frame.LockBuffer(AudioBufferAccessMode.Read))
using (IMemoryBufferReference inputReference = inputBuffer.CreateReference())
{
((IMemoryBufferByteAccess)inputReference).GetBuffer(out byte* inputDataInBytes, out uint inputCapacity);
Span<float> samples = new Span<float>(inputDataInBytes, (int)inputCapacity / sizeof(float));
for (int i = 0; i < samples.Length; i++)
{
float sample = samples[i];
// sample processing...
samples[i] = sample;
}
}
}
我使用 Visual Studio 分析器来确定问题的原因。 很明显存在内存问题。垃圾收集每秒运行几次。在每次垃圾回收时,我都能听到咔哒声。
Visual Studio 分析器显示垃圾收集的对象类型为 ProcessAudioFrameContext。
这些对象在进入ProcessFrame 方法之前由AudioGraph API 创建并作为参数传递给该方法。
我可以做些什么来避免这些频繁的垃圾收集吗?
【问题讨论】:
-
也许真正的问题是垃圾回收暂停了
AudioGraph线程:wpdev.uservoice.com/forums/110705-universal-windows-platform/…