我有一个对象模型,用于填充查询结果,然后传递给gridview。
这样的事情:
public class MyObjectModel
{
public int Variable1 {get;set;}
public int VariableN {get;set;}
}
假设变量1保持计数值,我知道计数永远不会变得非常大(即某一天即将到来的约会数)。现在,我将这些数据类型设置为int。假设有人每天预约的预约少于255次,这是可以肯定的。将数据类型从int更改为byte会影响性能吗?这值得吗?
由于
答案 0 :(得分:3)
不,表现不会受到太大影响。
对于每个int
,您将为特定示例保存3个字节,或总共6个字节。除非你有数百万这些,否则内存的节省非常小。
不值得麻烦。
编辑:
只是为了澄清 - 我的答案是关于示例代码的。在许多情况下,选择会有所不同,但这是一个规模问题,需要进行性能测试以确保正确的结果。
回答@ Filip的评论 - 将应用程序编译与64位和选择隔离数据类型之间存在差异。
答案 1 :(得分:1)
它将影响为该变量分配的内存量。在我个人看来,我不认为在示例中这是值得的。
如果有大量的变量或数据库表,你可以真正保存,那么是的,但不是在这种情况下。
此外,经过多年的维护编程,我可以肯定地说,对任何事情都设定上限是很安全的。如果有一些可怜的维护程序员因为试图节省大量资源而不得不重新编写应用程序的可能性很小,那么就不值得付出代价。
答案 2 :(得分:1)
使用小于int
(System.Int32
)的整数变量不会提供任何性能优势。这是因为CLR中的大多数整数操作将在执行操作之前将变量提升为int
。 int
被认为是开发CLR的系统上的“自然”整数大小。
请考虑以下代码:
for (byte appointmentIndex = 0; appointmentIndex < Variable1; appointmentIndex++)
ProcessAppointment(appointmentIndex);
在编译的代码中,比较(appointmentIndex < Variable1
)和增量(appointmentIndex++
)将(很可能)使用32位整数执行。即使优化器使用较小的数据类型,CPU本身也需要额外的工作来使用较小的数据类型。
如果要存储一组值,那么使用较小的数据类型可以帮助节省空间,这可能会在某些场景中提供性能优势。
答案 3 :(得分:0)
.NET运行时优化了Int32的使用,特别是对于计数器等。 .NET Integer vs Int16?
答案 4 :(得分:0)
与普遍看法相反,使数据类型更小不会使访问速度更快。事实上,它更慢。查看bool
,它实现为int
。
这是因为在内部,你的CPU使用本机字大小的寄存器(现在是32/64位),并且你强迫它无缘无故地来回转换你的数据(只有在编写结果时)在记忆中,但它仍然是你可以轻易避免的惩罚。)
摆弄整数宽度只会影响内存访问和缓存。这是您只能通过分析应用程序并特别查看页面错误计数器来解决的问题。
答案 5 :(得分:0)
我同意其他答案,表现不值得。但是,如果您要执行此操作,请使用short
而不是byte
。我的经验法则是选择你能想象到的最高数字,乘以10,然后用它作为选择价值的基础。因此,如果您无法想象一个高于200的值,那么请使用2000作为基础,这意味着您需要short
。