我遇到WPF应用程序性能问题。使用分析器我可以看到,在我的一个窗口中,有一些实例被创建并随着时间的推移而保持活动状态,因此使用的内存也会增长。
这是从分析器捕获的图表,其中包含实时实例数(红色)和内存消耗(粉红色)。
应用程序在15分钟内没有收到用户的输入,并且正在创建的实例的类型是WeakReference。在其他帖子中,我看到WeakReference的泄漏可能是由于事件注册的错误使用造成的,但在这种情况下,我在配置文件会话期间只打开了一个窗口,因此我怀疑它可能是调度程序的问题。
我使用调度程序从网络摄像头捕获图像,进行一些处理并以这种方式在WPF窗口中显示处理过的图像:
private delegate void AnalyzeImage();
Image<Bgr, byte> image;
String imagesFolder = "..\\..\\"
public MyWindow(){
InitializeComponent();
AnalyzeImage fetcher = new AnalyzeImage(this.getCard);
fetcher.BeginInvoke(null, null);
}
private void UpdateInterface()
{
ListReadCards.Items.Add(cardName);
imageBackup.Source = ImageProcessor.ToBitmapSource(image);
AnalyzeImage fetcher = new AnalyzeImage(this.getCard);
fetcher.BeginInvoke(null, null);
if (card > cardsToRead)
{
finished = true;
this.Close();
}
}
public void getCard()
{
Image<Gray, byte> thresholdImage;
cardName = ImageProcessor.getCard(capture.QueryFrame(), out thresholdImage, out image, imagesFolder);
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new AnalyzeImage(UpdateInterface));
if (cardName != null)
{
hand.Add(cardName);
card++;
}
}
已经尝试在for循环中执行ImageProcessor.getCard
和ImageProcessor.ToBitmapSource
1亿次以检查这些调用是否存在问题,但在这种情况下实例和内存不会增长。