XtraGrid (devexpress コントロール) に画像を表示したい。グリッドを表示する前に、データをデータテーブルにロードしたいと考えています。残念ながら、画像の読み込み中に常に「メモリ不足の例外」が発生します。小さな画像 (300 kb) のみを使用します。例外は、リリース モードのときにのみ発生することがわかりました。
ここに私のコード:
private void LoadData(List<string> categories)
{
SqlCeConnection cn;
cn = new SqlCeConnection(ConnectionString);
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
for (int j = 0; j < categories.Count; j++)
{
string value = categories[j];
// only if the connection string is not empty and a connection to the database was possible
if (ConnectionString != string.Empty)
{
if (value == "Alle")
{
DataTable dtAlle = new DataTable("Alle");
for (int i = 0; i < data.Count; i++)
{
dtAlle.Merge(data[i], false, MissingSchemaAction.Add);
}
this.data.Add(dtAlle);
}
else
{
string sql = "select * from " + value;
SqlCeCommand cmd = new SqlCeCommand(sql, cn);
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
DataTable dt = new DataTable(value);
da.Fill(dt);
List<string> imagePaths = new List<string>();
for (int i = 0; i < dt.Rows.Count; i++)
{
imagePaths.Add(Convert.ToString(dt.Rows[i][0]));
}
dt.Columns.RemoveAt(0);
DataColumn col = new DataColumn("Vorschaubild", typeof(Image));
dt.Columns.Add(col);
dt.Columns["Vorschaubild"].SetOrdinal(0); // einfuegen an erster Stelle
for (int i = 0; i < dt.Rows.Count; i++)
{
string imagePath = imagePaths[i];
if (imagePath != string.Empty)
{
FileInfo info = new FileInfo(imagePath);
string generatedPath = CheckIfPictureIsInClipboarPathAvailable(clipboardPath, info.Name);
if (generatedPath != string.Empty)
{
using (Image image = Image.FromFile(generatedPath))
{
dt.Rows[i].SetField("Vorschaubild", image);
image.Dispose();
}
}
else if (imagePath != string.Empty)
{
using (Image image = Image.FromFile(imagePath))
{
dt.Rows[i].SetField("Vorschaubild", image);
image.Dispose();
}
}
}
}
this.data.Add(dt);
}
}
}
}
助言がありますか?ありがとう、トロ