0

私のクラスには複雑なプロパティがあります:

    private Image m_LogoImage=null;

    public Image LogoImage
    {
        get
        {
            if (m_LogoImage == null && File.Exists(Data.LogoFileUrl))
            {
                DrawingImage image = DrawingImage.FromFile(Data.LogoFileUrl);
                m_LogoImage = Image.GetInstance(image, new Color(1, 1, 1));
            }
            return m_LogoImage;
        }
    }

LogoImage.get は非常に遅く、クライアントが最初に呼び出すまでのリソースを消費するアクションです。プロパティは画像を計算し、結果をプライベート変数 m_LogoImage に保存します。
これは私には非常に基本的に見えます。.NET サポートの自動プロパティ ( public string P {get;set;})。複雑なプロパティの自動保存に対応していますか?

4

3 に答える 3

5

状態に基づく懸念事項が多数あるため、遅延読み込みのための言語レベルのメカニズムはありません。

ただし、Lazy<T>クラスを使用してこの機能を実現できます。

 private Lazy<Image> logo = new Lazy(() => LoadImage()); 

 public Image LogoImage
    {
        get
        {
            return logo.Value;
        }
    }

null 合体演算子 ( ??) を使用して、null 許容型の遅延読み込みを実行することもできます。

get 
{
    return image ?? (image = LoadImage());
}
于 2012-07-16T22:21:49.917 に答える
0

見た目から、DrawingImage.FromFile(Data.LogoFileUrl);あなたのデータはある種の静的オブジェクトから来ています。クラス インスタンス ベースのロードの現在のアプローチは、新しいインスタンスごとに同じオブジェクトを何度もロードすることです。初期実行時に静的オブジェクトにデータをプリロードすることで最適化できます。例えば:

private static Image _m_LogoImage = DrawingImage.FromFile(Data.LogoFileUrl);

public Image LogoImage
{
    get  {  return _m_LogoImage; }
}
于 2012-07-16T22:24:37.240 に答える
0

いいえ-「複雑なプロパティの自動保存」をサポートしていません-それ以来、「複雑なプロパティの自動読み込み」をサポートする必要があることを意味します-これはカスタマイズ可能でなければなりません...そして、あなたは結局C#で。

于 2012-07-16T22:18:09.770 に答える