繁体   English   中英

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

[英]Downsides to using Int64 universally instead of int (C#)

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

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

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

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

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

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

在32位CPU上,64位整数将更多处理器密集型进行计算。

还有明显的内存使用。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM