调用Image.FromFile会抛出内存不足异常

时间:2014-05-24 00:12:40

标签: c# arrays winforms out-of-memory

我有一个填充数据网格视图的函数,此函数使用分页

page size = 30

直到第9页抛出内存异常才能正常工作

我有Windows Server 2008 R2 64位,8 GB RAM

public static void FillDataGrid(DataGridView dataGrid, int intPageSize, int intPageIndex, out int intTotal
        ,string title)
    {

         dataGrid.Rows.Clear();

        try
        {
            var dt = GetData(intPageSize, intPageIndex, out intTotal, title); //dt type DataTable
            var dicrectory = Directory.GetCurrentDirectory();

            for (var i = 0; i < dt.Rows.Count; i++)
            {
                    var uri = new Uri(dt.Rows[i]["URL"].ToString());
                    var host = uri.Host.Replace("www.", "");
                    host = host.Replace(".com", "");

                    var iconFullUrl = dicrectory + @"\Icons\" +
                                      dt.Rows[i]["IconURL"].ToString();
                    object[] row = new object[10];
                    row[0] = "False";
                    row[1] = Image.FromFile(iconFullUrl);
                    row[2] = dt.Rows[i]["Title"].ToString();
                    row[3] = host;
                    row[4] = Convert.ToDateTime(dt.Rows[i]["Date"].ToString()).ToShortDateString();
                    row[5] = "";
                    row[6] = dt.Rows[i]["URL"].ToString();
                    row[7] = "";
                    row[8] = "";
                    row[9] = dt.Rows[i]["Id"].ToString();

                    dataGrid.Rows.Add(row);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

在此部分代码中发生错误

 row[1] = Image.FromFile(iconFullUrl); 

1 个答案:

答案 0 :(得分:2)

将我的评论添加为答案:

根据MSDN,OutOfMemory错误可能是由于文件没有有效的图像格式,或者因为GDI +不支持文件的像素格式。

只要图像没有被处理,文件就会被标记为使用