问题1:
枚举类型的基类型可以选择多种类型。
如果我选择 byte 或者 int 作为一个枚举类型的基类型,
在内存占用和运算性能上有什么区别?问题2:
byte, sbyte, short, ushort, int, uint, long, ulong
以上几个值类型的运算性能次序究竟是怎样的?
decimal 与 float, double 之间相比,情况又如何?
decimal 与 int, long 之间相比,情况又如何?比较时,不要管溢出的问题,总是假设一个值可以适用于比较的类型。提出这些初级问题,只是因为最近在研究一个算法,对如何采用合适的值类型没有太大把握。
我希望正确的值类型选择对提升算法的速度有效果。烦请各位大侠赐教。
枚举类型的基类型可以选择多种类型。
如果我选择 byte 或者 int 作为一个枚举类型的基类型,
在内存占用和运算性能上有什么区别?问题2:
byte, sbyte, short, ushort, int, uint, long, ulong
以上几个值类型的运算性能次序究竟是怎样的?
decimal 与 float, double 之间相比,情况又如何?
decimal 与 int, long 之间相比,情况又如何?比较时,不要管溢出的问题,总是假设一个值可以适用于比较的类型。提出这些初级问题,只是因为最近在研究一个算法,对如何采用合适的值类型没有太大把握。
我希望正确的值类型选择对提升算法的速度有效果。烦请各位大侠赐教。
32位的处理器,
所以用4个字节即32位的数据最快,.Net中就是int型了。
做个简单的测试程序实际测试一下来得最权威了,呵呵
您说CPU周期那个快?
public enum MyEnum : byte
{
...
}
我不知道事实上是不是和我想的一样。当一个算法的运算时间可能长达几十分钟时,我想我不得不慎重对待值类型的选取。在这方面,我也找不到一份有价值的使用建议或者白皮书什么的。
我想 C# 提供更种不同的值类型,除了值边界检查,肯定还有其他的用意。
可惜关注此类问题的人实在太少,因为对于通常的开发确实不必在这方面太较真。希望更多高手指点一下迷津。
整型中应该是字节数越少运算速度越快。但是如果数值过大,存储字节多的也可能更快
{
.....
}
具说这样也会报错 ,
性能差别实在是微呼其微,没必要在这里计较 只要不把他装箱折箱,性能影响不大
因为枚举是值类型
public enum MyEnum : byte
{
sss=0x01,
......
} 编译后大约是这样了:struct MyEnum :System.Enum
{
public const MyEnum sss=(MyEnum)Ox01;
......
}
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/fastmanagedcode.asp
...
这两天虽说还不能得空,但也必须开始好好阅读这些文章。TO 速马,编译后固然如此,但在 32 位计算机上,byte 类型是否真能少占内存。
不好意思,我真有点不大清楚值类型在堆栈上的内存分配和管理方面的实际细节。
generics 好象只在 C# 2.0 中才能支持,目前我尚未使用该版本。
另外,泛型的作用如果仅在编译时,应该没有性能上的副作用。如果泛型在运行时仍有影响的话,那么可能泛型也会被放弃的。
这个取决于CLR实现
可以通过Marshal.SizeOf方法了解到,其内存占用确实是一个byte
但是减少内存占用并不意味着就能提高性能,Windows的BOOL类型,实际上也是typedef int BOOL,理由是这样可以提高速度
(CLR内的bool/Boolean类型也是,内存占用也是和一个int一样大,四个byte)关于decimal:
decimal并不是primitive类型,CLR也不会直接对其处理(除了decimal以外的其它非primitive类型似乎只有string享有这种待遇)
并且decimal类型具有最高的精度,内存占用比double还大一倍,应该是最慢的了