【问题标题】:Calling Image.FromFile throws Out of memory exception调用 Image.FromFile 抛出内存不足异常
【发布时间】:2014-05-24 00:12:39
【问题描述】:

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

页面大小 = 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); 

【问题讨论】:

  • 根据MSDN 的说法,OutOfMemory 错误可能是由于文件没有有效的图像格式或 GDI+ 不支持文件的像素格式。此外,只要图像未被处理,文件就会被标记为正在使用。
  • 是的,谢谢,这就是问题所在,我如何将其标记为答案? :D
  • 我会添加作为答案
  • 您应该删除该 try/catch 块。除了弄乱您的堆栈跟踪之外,它没有任何作用(看起来异常来自“抛出”的行)。

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


【解决方案1】:

添加我的评论作为答案:

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

而且只要图像没有被释放,文件就会被标记为使用中

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多