4

ボタンにバインドするために、画像のバイト配列を BitmapImage に変換しようとしています。

public static BitmapImage GetBitmapImageFromByteArray(byte[] p_Image)
    {
        try
        {
            BitmapImage bmpImage;
            if (p_Image != null)
            {
                using (MemoryStream msStream = new MemoryStream(p_Image))
                {
                    msStream.Position = 0;
                    bmpImage = GetBitmapImageFromStream(msStream);
                    //msStream.Close();
                    return bmpImage;
                }
            }
        }
        catch
        {
        }
        return null;
    }

GetBitmapImageFromStream は次のようになります。

public static BitmapImage GetBitmapImageFromStream(MemoryStream msImage)
    {
        try
        {
            if (msImage == null) return null;
                BitmapImage bmpImg = new BitmapImage();
                msImage.Position = 0;
                bmpImg.BeginInit();
                bmpImg.CacheOption = BitmapCacheOption.OnLoad;
                bmpImg.StreamSource = msImage;
                bmpImg.EndInit();
                return bmpImg;

        }
        catch
        {
            return null;
        }
    }

bmpImg.EndInit() では、メモリにこの巨大なスパイクがあります。また、問題の原因となっているインターフェイスに多くのボタンがあります。なぜこれが起こっているのですか?どうすれば修正できますか?またはメモリを復元する方法はありますか?

ありがとう。

4

2 に答える 2

1

私の推測では、それをキャッシュするためにコピーを作成ボタンで使用するために 1 つのコピーを縮小した可能性があります。また、ストリームにコピーされたすべてのデータを収集するわけではありませんが、メモリには複数のコピーが存在します。GC

于 2011-05-26T19:35:38.730 に答える
0

画像の高さを制限してみてください。DecodePixelHeight プロパティを BitmapImage に設定できます。バイトの変換には時間がかかりますが、最大高さが制限され、メモリ使用量が削減されます。

                var bmpImg = new BitmapImage();
                msImage.Position = 0;
                bmpImg.BeginInit();

                 bmpImg.DecodePixelHeight =containerHeight; 

                bmpImg.CacheOption = BitmapCacheOption.OnLoad;
                bmpImg.StreamSource = msImage;
                bmpImg.EndInit();
                return bmpImg;

Ps メモリ リークが発生する可能性があります。 http://code.logos.com/blog/2008/04/memory_leak_with_bitmapimage_and_memorystream.html

于 2013-10-23T22:17:25.657 に答える