繁体   English   中英

为什么此代码段在重负载下返回null?

[英]Why does this code segment return null under heavy load?

if (this.UserManagmentType != UserMgmtType.NONE)
{
   return (User)GetUserBaseById(userId);
}

if (this.UserManagmentType != UserMgmtType.NONE)
{
   return GetUserBaseById(userId) as User;
}

我理解演员之间的区别。 如果转换失败,第一个if语句应抛出无效的强制转换异常,而第二个if语句将返回null。

我的问题是, 对于多线程环境中负载较重的相同数据 ,为什么第一个if语句偶尔返回null,而第二个if语句总是返回有效数据?

另一个值得注意的是contains方法是WCF端点。

感谢您的任何见解。

根据您发布的代码,答案是:它不会。

第一个片段将返回null ,如果(且仅当) GetUserBaseById返回null。 如果方法的返回值为null 或者它不是User对象,则第二个将返回null 这种行为在重负荷下不会改变。

如果您在重载时看到不同的结果,那么我建议您在代码的其他地方遇到多线程问题,而这恰好是您看到效果的地方。 这种错误可能对外部条件非常敏感,并且您无法保证每次运行时它都会以相同的方式重现(因为它可能对其他进程的磁盘争用敏感)。

我建议彻底审查有问题的多线程功能:你看到的问题不在于那行代码。

两个铸件是不同的,根据这篇文章

http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in

使用as关键字更快,我认为这与返回值始终与前缀强制转换相关。

但是我认为您需要仔细检查如何实现GetUserBaseById(userId)方法,因为我怀疑它可能没有针对多线程环境正确实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM