And*_*ndy 3 .net c# boxing properties
private double _value;
public object Value
{
get
{
return _value;
}
}
Run Code Online (Sandbox Code Playgroud)
嗨,大家好只是进行代码审查,并在我们的代码库中注意到了 它不是一个错字,但我关注的是调用getter时涉及的拳击,并且假设这个代码是一个生成数百次的类型,并且频繁调用getter我可以看到内存问题.
我的担忧是否与记忆有关?我的意思是,由于拳击,我们加倍了吗?
是的,您展示的代码片段确实会导致拳击.你迫使运行时转换double为object.如果您想向自己或同事证明,请查看已编译的IL以获取告知box和unbox说明.
然而,尽管你在尽可能避免拳击时是正确的,但实际的性能损失并不总是像宣传那样重要.在对代码库进行重大更改之前,请花一些时间进行性能分析,以确保您花费时间的代码确实是性能瓶颈.
鉴于上面的具体示例,为什么您需要首先返回类型object,这一点并不是特别清楚.由于您只是返回私有字段的值,因此您只需将属性更改为返回类型即可double.
或者,您可以将属性转换为通用方法.(属性不能是通用的,但是方法可以,如果你在getter中进行计算密集的工作,它可能应该是一种方法.)泛型减轻了拳击的问题,但仍然允许你很大程度的返回什么类型的灵活性(类似于返回类型object).
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |