2016-12-17 11 views
-3

ここで私のコードは、DLLから.resxファイルからリソースをロードしています。それは約40程度のヒットまでリソースを正常にロードし、メモリ例外をスローし始めます。誰が私になぜこれが起こっているのか説明できますか?また、それを修正する方法も?メモリ不足のSystem.Drawing.dll

EDIT:

私は64ビットであるために私の溶液中のすべてのプロジェクトを変更することで、私の問題を解決しました。

おかげ

/// <summary> 
    /// Loads all default resources. 
    /// </summary> 
    /// <returns></returns> 
    private static List<Bitmap> LoadAllInternalResources() 
    { 
     List<Bitmap> Ret = new List<Bitmap>(); 

     #region Spades 

     Ret.Add(MainResources.MainResources._50); 

     Ret.Add(MainResources.MainResources._46); 

     Ret.Add(MainResources.MainResources._12); 

     Ret.Add(MainResources.MainResources._38); 

     Ret.Add(MainResources.MainResources._34); 

     Ret.Add(MainResources.MainResources._30); 

     Ret.Add(MainResources.MainResources._26); 

     Ret.Add(MainResources.MainResources._22); 

     Ret.Add(MainResources.MainResources._18); 

     Ret.Add(MainResources.MainResources._14); 

     Ret.Add(MainResources.MainResources._10); 

     Ret.Add(MainResources.MainResources._6); 

     Ret.Add(MainResources.MainResources._2); 

     #endregion Spades 

     #region Clubs 

     Ret.Add(MainResources.MainResources._49); 

     Ret.Add(MainResources.MainResources._45); 

     Ret.Add(MainResources.MainResources._41); 

     Ret.Add(MainResources.MainResources._37); 

     Ret.Add(MainResources.MainResources._33); 

     Ret.Add(MainResources.MainResources._29); 

     Ret.Add(MainResources.MainResources._25); 

     Ret.Add(MainResources.MainResources._21); 

     Ret.Add(MainResources.MainResources._17); 

     Ret.Add(MainResources.MainResources._13); 

     Ret.Add(MainResources.MainResources._9); 

     Ret.Add(MainResources.MainResources._5); 

     Ret.Add(MainResources.MainResources._1); 

     #endregion Clubs 

     #region Hearts 

     Ret.Add(MainResources.MainResources._51); 

     Ret.Add(MainResources.MainResources._47); 

     Ret.Add(MainResources.MainResources._43); 

     Ret.Add(MainResources.MainResources._39); 

     Ret.Add(MainResources.MainResources._35); 

     Ret.Add(MainResources.MainResources._31); 

     Ret.Add(MainResources.MainResources._27); 

     Ret.Add(MainResources.MainResources._23); 

     Ret.Add(MainResources.MainResources._19); 

     Ret.Add(MainResources.MainResources._15); 

     Ret.Add(MainResources.MainResources._11); 

     Ret.Add(MainResources.MainResources._7); 

     Ret.Add(MainResources.MainResources._3); 

     #endregion Hearts 

     #region Diamonds 

     Ret.Add(MainResources.MainResources._52); 

     Ret.Add(MainResources.MainResources._48); 

     Ret.Add(MainResources.MainResources._44); 

     Ret.Add(MainResources.MainResources._40); 

     Ret.Add(MainResources.MainResources._36); 

     Ret.Add(MainResources.MainResources._32); 

     Ret.Add(MainResources.MainResources._28); 

     Ret.Add(MainResources.MainResources._24); 

     Ret.Add(MainResources.MainResources._20); 

     Ret.Add(MainResources.MainResources._16); 

     Ret.Add(MainResources.MainResources._12); 

     Ret.Add(MainResources.MainResources._8); 

     Ret.Add(MainResources.MainResources._4); 

     #endregion Diamonds 

     #region Jokers 

     Ret.Add(MainResources.MainResources._54); 

     Ret.Add(MainResources.MainResources._53); 

     #endregion Jokers 

     return Ret; 
    } 
+0

画像の大きさはどれくらいですか?これまでは72x96のカードがImageListやディスクvに簡単にロードできました。そのサイトはなくなりましたが、誰かがどこかにキャッシュ/ミラーリングしていると確信しています – Plutonix

+0

イメージはそれぞれ365Kくらいの非常に大きいです。私は推測している32倍のプログラムに許される最大量のメモリを打つことができます。それをチェックします。 – SneakyTactician

答えて

0

私の問題を解決するには、プロジェクト設定を32ビットではなく64ビットに変更するだけでした。

+1

それはそれを扱わないように問題を解決しません。 – Abion47

0

はあなたのマシンがこれらすべてのビットマップをロードするための十分なメモリがありません。あなたはそれらをすべて同時にロードする必要がありますか?

  1. おそらく、あなたがそれらを必要としてそれらをロードし、あなたがそれらを必要としないときにそれらを捨てる:ここ

    は、問題を修正するためにいくつかの方法があります。これは一度にいくつかの項目を行います。 File.ReadLinesも同様のアプローチを使用します。それはIEnumberableを返し、それを横断するときに一度に1行を読み込みます。 File.ReadAllLinesはファイル全体をメモリに読み込みます。したがって、ファイルが4GBで、各行が50KBの場合、File.ReadLinesは一度に50KBを読み込みます。 File.ReadAllLinesは4GB全体をメモリに読み込みます。 (これらの数字は任意に選択されます)。したがって、32ビットマシンでは、File.ReadAllLinesはメモリ不足の例外を発生させますが、File.ReadLinesは、列挙子全体に対してToList()を呼び出さない限り長くはなりません。

  2. サムネイルが必要な場合は、サムネイルを追加して、実際の画像を読み込むことができます。
  3. マシンのRAMを増やしてください。 (これは私がお勧めする解決策ではありませんが)。
+0

私はリソースを読み込むためにマシンにRAMを持っています。それは私のプログラムと関係があります。 – SneakyTactician

+0

はい、それはあなたのプログラムと一緒にする必要があり、それは私が言ったものです。これらのビットマップはどれくらいの大きさで、RAMの容量はどれくらいですか? – CodingYoshi