我记得我在某处读到过,从用户代码中抛出任何 System.SystemException
派生异常是一种不好的做法,因为用户代码应该只抛出应用程序异常。
我们有一个使用 GPU 的原生库。它可能会返回一个错误代码,表明我们的 GPU 内存不足。我们想将此错误代码转换为 .Net 异常。
这是我能想到的可能的异常(exception)情况:
System.OutOfMemoryException
System.InvalidOperationException
带有适当的文本- 自定义异常(基于InvalidOperationException)
哪个最好,为什么?
最佳答案
抛出 System.OutOfMemoryException
不是一个理想的选择。使用您的库的程序员可能会对 System.OutOfMemoryException
使用react,方法是从内存中清除一些非必要的对象,然后重试。但是,在您的情况下,它是 GPU 内存,而不是系统内存,因此他们的尝试不会成功。
如果用户可以选择直接或间接地从 GPU 内存卸载东西,自定义异常方法(第三种)提供了最干净的选择。如果他们完全无法控制它,即异常基本上是一条“你死了”的消息,那么 System.InvalidOperationException
也是一个不错的选择。
关于c# - 是从应用程序代码良好设计中抛出 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262095/