当前位置:  开发笔记 > 编程语言 > 正文

为什么不到处尝试"尝试"方法?

如何解决《为什么不到处尝试"尝试"方法?》经验,为你挑选了1个好方法。

我想知道,为什么Microsoft开发人员不向我们提供各种不可靠方法的"尝试"版本?

如果我使用数据库连接或smtp客户端,我总是必须考虑例外:

try
{
    smtpClient.Send(message);
}
catch (SmtpException)
{
    // test with real smtp server and analyze an exception and it's contents here
}

但我想要的用户是:

if(!smtpClient.TrySend(message, out reason))
{
    // analyze reason here
}

对我来说最大的问题是异常性能开销.我无法承担在我的服务的每个客户电话上抛出异常.如果我需要检查几十个连接/提供者,这可能会导致每个客户端请求有几十个例外.

我的问题是:.NET中这种API设计决策的基本原理是什么?我不认为这是一个错误,因为它无处不在,而不是单一的技术.

更新 我必须再给你一个.NET异常的例子来停止谈论网络延迟.例如,如果停止了Windows服务,则System.Diagnostics.EventLog.WriteEntry可以抛出方法System.ComponentModel.Win32Exception.



1> Heinzi..:

我想知道,为什么Microsoft开发人员不向我们提供各种不可靠方法的"尝试"版本?

由于我不是微软员工,我只能猜测.我的猜测是有两个原因:

在设计.NET类库的第一个版本时,他们没有想到它 - 请注意,这些TryParse方法已在更高版本中添加.

性能差异不够重要(见下文),以保证实施和维护新Try...方法的成本..NET Framework还需要更紧急的其他功能.

对我来说最大的问题是异常性能开销.

非常怀疑.SMTP超时(=几秒)的"性能开销"主导了将异常(小于一毫秒)抛出超过1000倍的"性能开销".

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有