拒绝普遍使用Int64而不是int(C#)

时间:2008-10-28 11:14:07

标签: c# .net-2.0

我们使用具有诸如版本(NHibernate所需的日期时间)和guid(作为键)等属性的基本实体。

它还有一个带有两个函数的Id(int)字段。首先,如果有遗留应用程序密钥则与遗留应用程序密钥相关其次作为简写代码:例如,有时基于这些文件创建文件,使用我们的guid键看起来很丑陋。我的问题不是关于基本实体的优点和缺点,而是关于将此Id添加到Int64?

它不会影响它在MS SQL Server数据库中的存储方式。我们的缓存和内存会有更多的成本吗?这真是一件令人担忧的事吗?

我有兴趣听到除了表演之外的其他缺点。还要考虑这些值也可能通过Web服务及时向第三方公开。

另一种方法是处理大整数的异常,并在派生实体中专门实现它们。缺点是这需要在代码中完成,当我们在生成更大的整数时发现一些情况时我们会怎么做?当然会有输入验证来阻止实际错误,但它可能会限制扩展数据。

4 个答案:

答案 0 :(得分:4)

如果您的应用程序在64位CPU上运行,那么可能没什么区别。

在32位CPU上,64位整数对处理器执行计算的能力更强。

还有明显的内存使用。

答案 1 :(得分:3)

嗯,int64使用8字节的内存存储,而int使用4字节......但是,你已经指出了大部分的缺点。当然,在许多系统上执行的计算也会变慢(64位模式下运行的64位系统可以像32位一样快地执行64位操作,但32位系统需要执行额外的工作,这意味着需要添加两个64位系统位数由两个32位加法加一些额外代码执行 - 其他数学运算将同样分解为32位运算)。但是,除非您存储数百万这些数字并使用它们执行大量操作,否则我怀疑您会看到任何性能差异,无论是CPU时间还是内存。

答案 2 :(得分:2)

只有您可以回答缓存空间有多大问题。如果这是缓存键并且你有一个巨大的blob作为值,那么在键上添加额外的4个字节不会有太大的区别。如果 all 你存储的是ID,那么显然它会产生更具比例意义的影响。

目前用于存储ID的内存是多少?

答案 3 :(得分:1)

便携性......虽然如果你想要便携式的话,C#并不是真正的通用语言,所以这对你的观点来说可能没有实际意义吗?