画像を<image>
コントロールにロードするコードを書きました。複数の場所で使用されている同じ画像を編集して保存する必要があるため、コードを変更する位置にありました。避けてくださいAccess violation error
。今私はOut of memory exception
を得ています。画像の読み込み中にメモリリークが発生するC#
私は上記のコードにメモリリークがあるかどうかを知る必要があります。
画像を<image>
コントロールにロードするコードを書きました。複数の場所で使用されている同じ画像を編集して保存する必要があるため、コードを変更する位置にありました。避けてくださいAccess violation error
。今私はOut of memory exception
を得ています。画像の読み込み中にメモリリークが発生するC#
私は上記のコードにメモリリークがあるかどうかを知る必要があります。
私は同じ問題に似た何かを持っていたし、このように画像をロードすることで解決し、
//コード:
置き換え、
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
return decoder.Frames.FirstOrDefault();
}
で、
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri(path);
bi.EndInit();
bi.Freeze();
return bi;
必要に応じて
bi
オブジェクトnull
を01にするブロック。
そのコードはリークを引き起こしません。しかし、イメージをフリーズするかどうかを検討する必要があります。 x.ImageSource.Freeze();また
In what scenarios does freezing wpf objects benefit performace greatly
あなたはあなたがプロファイラを取得する必要がありますメモリリークを持っていると思われる場合。 レッドAntのプロファイラは、真剣に、それはそれだけの価値だ、彼らはおそらく無料トライアルか何かを持っているが、それはリークの多くのソースを見つけることができます倍Red Ant's .Net Memory Profiler
の数十は、タイマーのように、イベント等適切に閉じられていない非常に役に立った私を救いました。あなたがそれらを好きでない場合は、別のソリューションに行くが、リークVisual Studioがあなたを助けてくれない場合は、サードパーティのソリューションが必要です。
これが動作するかどうかを確認するには、いつか必要です。ありがとう – John