[英]Microsoft.win32.SaveFileDialog interferes with memory usage WPF (.Net5)
我的 MVVM 視圖 model 中有一個私有方法,當用戶按下視圖上的按鈕時調用該方法。 在這種方法中,我想要求用戶指定要保存的文件,然后調用 static class 庫來執行一些圖像處理(從光盤讀取文件,進行一些小處理並使用 ffmediaToolkit 將它們寫入 mp4 文件。
private void makeMP4()
{
Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog();
saveFileDialog.Filter = "Media File (*.mp4)|*.mp4";
saveFileDialog.InitialDirectory = @"D:\temp\mp4output\";
saveFileDialog.FileName = myImageHandler.SuggestedFileName + ".mp4";
// If I remove the following line, memory usage is stable at 1GB. If I keep this line
// memory grows linearly until program terminates.
_ = saveFileDialog.ShowDialog();
// I also tried passing current window handle to ShowDialog (with same outcome):
//_ = saveFileDialog.ShowDialog(Application.Current.Windows.OfType<MainWindow>().FirstOrDefault());
MP4Maker mp4Maker = new(myImageHandler);
mp4Maker.GenerateMP4(@"D:\temp\mp4maker\hardcodedFileName.mp4");
}
正如上面代碼中的注釋所解釋的,如果我調用 ShowDialog 方法,我的應用程序在處理 mp4 文件時會消耗太多 memory。 但是如果我省略對 ShowDialog 的調用,memory 的使用量穩定在 1GB 左右。
我見過的兩個建議解決方案(以及它們對我不起作用的原因)是:
任何人都可以看到為什么調用 ShowDialog 導致 memory 泄漏以及如何防止它? 謝謝。
運行SaveFileDialog.ShowDialog
后,您應該嘗試運行
GC.Collect(); GC.WaitForPendingFinalizers();
這應該強制.Net 在調用下一個例程之前清理與先前調用相關的任何 memory。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.