在Windows 10上,Windows Media Foundation函数(MFCreateSourceReaderFromURL)中存在错误。每次使用后都会导致内存泄漏。是否有其他可选功能可以使用而不会导致内存泄漏? Windows Media Foundation似乎充满了错误,因此如何避免它?
证明内存泄漏,请运行此代码(x86),并每秒观察到大量内存泄漏:
#include <mfapi.h>
#include <mfidl.h>
#include <mfreadwrite.h>
#pragma comment (lib, "Mfreadwrite.lib")
#pragma comment (lib, "Mfplat.lib")
#pragma comment (lib, "mfuuid.lib")
int main()
{
while (true)
{
if (FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
{
return 1;
}
if (FAILED(MFStartup(MF_VERSION)))
{
return 1;
}
IMFSourceReader* sourceReader = nullptr;
if (FAILED(MFCreateSourceReaderFromURL(L"C:/any_audio_file.wav", nullptr, &sourceReader)))
{
return 1;
}
sourceReader->Release();
MFShutdown();
CoUninitialize();
}
return 0;
}
Offtopic:太沮丧了。我使用DirectShow只是为了发现RenderFile网络音频流中存在错误。几天后更改为替代方法(Windows Media Foundation),发现其中存在内存泄漏。微软为您服务。
编辑:仅当文件名末尾没有* .mp3(且内容为mp3)时,才会发生内存泄漏。或者,如果文件名末尾没有* .wav(内容为wave)例:有mp3文件“ music.mp3”。将名称更改为“ music”或“ music.wav”。内存泄漏将发生。
请勿在专业软件中使用Microsoft Windows Media Foundation,因为它充满了隐藏的错误和内存泄漏。