2
A
回答
10
没有拳击或拆箱。你问来干什么?解析算法比box/unbox操作要昂贵得多,因此即使存在性能差异,您也不会“感觉”性能差异。
2
我不相信那里有拆箱。我认为代码使用一个int变量并返回它,因此没有装箱/取消装箱。
编辑:我同意280Z28。我只是看了一下代码,它非常复杂。最终的价值并没有像我想象的那样是盒装的,但是有一些漫长的预处理步骤可以达到目的,所以即使是装盒,性能也不会有太大的变化。
顺便说一句,如果你不知道,你可以使用Reflector自己看代码。
0
是的。使用Reflector,你可以看到究竟发生了什么。我看不到任何拳击,但也有一些石膏,例如:
private static unsafe void StringToNumber(string str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo info, bool parseDecimal)
{
if (str == null)
{
throw new ArgumentNullException("String");
}
fixed (char* str2 = ((char*) str))
{
char* chPtr = str2;
char* chPtr2 = chPtr;
if (!ParseNumber(ref chPtr2, options, ref number, info, parseDecimal) ||
((((long) ((chPtr2 - chPtr)/2)) < str.Length) && //cast
!TrailingZeros(str, (int) ((long) ((chPtr2 - chPtr)/2))))) //cast
{
throw new FormatException(Environment.GetResourceString("Format_InvalidString"));
}
}
}
或此,发生在一个循环:
private static unsafe char* MatchChars(char* p, string str)
{
fixed (char* str2 = ((char*) str)) //cast
{
char* chPtr = str2;
return MatchChars(p, chPtr);
}
}
真正的问题是 - 这样吗?
0
添加我的位。
“取消装箱”的术语/技术仅适用于装箱值类型。 因此,如果值类型变量未被装箱(转换为引用类型),则可以对其进行拆箱。
在你的情况下,你有一个有效的引用类型值,它没有范围被拆箱。
相关问题
- 1. 是否强制转换为基类,包括装箱和拆箱
- 2. 将类型转换为拆箱类型
- 3. C# - 有关装箱/拆箱/类型转换的问题。我不明白
- 4. 解析或自动装箱或拆箱
- 5. C中的装箱和拆箱#
- 6. 拆箱标签类型是否安全?
- 7. 拆箱值类型
- 8. 用例在C#中装箱值类型?
- 9. 类别#isAssignable来源和拆箱/装箱
- 10. 与一般类型和装箱/拆箱相互作用
- 11. 哪里限制通用类型与Double Typeparam - 装箱/拆箱?
- 12. 无法通过引用转换,装箱转换,取消装箱转换,包装转换或null类型转换将类型
- 13. 在这个例子中,是否需要拆箱时使用装箱?
- 14. 铸造,拆箱,转换..?
- 15. C#长数据类型拆箱问题
- 16. 拆箱到未知类型
- 17. 拆箱动态类型
- 18. 使用ASM Java库进行拆箱
- 19. 对CLR中的装箱和拆箱操作进行了哪些性能改进?
- 20. 拆箱是否昂贵?
- 21. 返回装箱值类型是否是该类型
- 22. Scalaz拆箱标签类型不会自动拆箱
- 23. 在C++类中包装C类库,并进行类型转换
- 24. Java的自动装箱/拆箱wierdness
- 25. 谁来做自动装箱/拆箱?
- 26. 装箱和拆箱的概念
- 27. 集装箱类型Type类
- 28. 使用采用新的与正常decleration和Integer(装箱/拆箱)
- 29. System.Array是否对值类型执行装箱操作?
- 30. 使用对象在java中自动装箱拆箱使用对象
或者只是看看莫诺的版本。在第114行左右:http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/corlib/System/Int32.cs?revision=138730&view=markup – Dykam 2009-10-15 06:31:31