System.Drawing Out of Memory Exception

Scr*_*uck 7 c# system.drawing

我的应用程序图形引擎抛出这些异常.它们都被空的捕获块消耗掉.在早期,我发现了一个没有被困的人(我回忆起与笔扩大有关).我用try和一个空的catch块包围它.似乎这些例外对所产生的图纸没有影响.我已经对此做了一些阅读而没有真正了解或深入了解它.

所以我的问题:

  1. 如果可以安全食用,为什么会抛出这些?和
  2. 忽视它们是否安全?我担心每个人都有一些隐藏的效果.我有内存泄漏,例如我从未找到过.

Joe*_*ite 24

我已经看到System.Drawing抛出OutOfMemoryExceptions,即使它没有内存不足.一些GDI +函​​数显然只是返回一个愚蠢的错误代码.

IIRC,如果您尝试使用LinearGradientBrush填充宽度或高度为零的矩形,您将获得OutOfMemoryException.可能还有其他条件,但这是我们遇到的主要问题.

在这种情况下,不需要try/catch.只需if在绘图代码中添加一个语句,如果宽度或高度为零,则不填充矩形.

更新:根据对此答案的评论,如果您尝试加载损坏的图像文件,也会发生此问题.为此,你别无选择,只能尝试/捕捉.

您可能安全地从GDI +中捕获OutOfMemoryExceptions,但保持try块尽可能小.考虑记录异常,以便您可以分析日志并尽可能添加防御性代码.您不希望掩盖真正的 OutOfMemoryException,但您不希望愚蠢的GDI +错误代码使您的应用程序崩溃.