c# - 是从应用程序代码良好设计中抛出 OutOfMemoryException

标签 c# .net exception

我记得我在某处读到过,从用户代码中抛出任何 System.SystemException 派生异常是一种不好的做法,因为用户代码应该只抛出应用程序异常。

我们有一个使用 GPU 的原生库。它可能会返回一个错误代码,表明我们的 GPU 内存不足。我们想将此错误代码转换为 .Net 异常。

这是我能想到的可能的异常(exception)情况:

  1. System.OutOfMemoryException
  2. System.InvalidOperationException 带有适当的文本
  3. 自定义异常(基于InvalidOperationException)

哪个最好,为什么?

最佳答案

抛出 System.OutOfMemoryException 不是一个理想的选择。使用您的库的程序员可能会对 System.OutOfMemoryException 使用react,方法是从内存中清除一些非必要的对象,然后重试。但是,在您的情况下,它是 GPU 内存,而不是系统内存,因此他们的尝试不会成功。

如果用户可以选择直接或间接地从 GPU 内存卸载东西,自定义异常方法(第三种)提供了最干净的选择。如果他们完全无法控制它,即异常基本上是一条“你死了”的消息,那么 System.InvalidOperationException 也是一个不错的选择。

关于c# - 是从应用程序代码良好设计中抛出 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262095/

相关文章:

c# - 什么是 "native"和 "literal"关键字

c# - Telerik RadWindows/如何使用 DocMenu 打开 Telerik RadWindows

c# - 如何在 C# 中组合委托(delegate)

.NET 数据提供程序可以快速插入 300,000 条记录吗?

oracle - ORA-03113 : end-of-file on communication channel with CAST MULTISET 的解决方法

c++ - findcontours 断言失败

c++ - 如何在禁用异常的情况下检查构造函数的失败

c# - 这个 SUM() 查询是否正确?

c# - C# 中动态对象的赋值是如何工作的?

c# - 使用反射在构造函数中初始化(列表)属性