代码之家  ›  专栏  ›  技术社区  ›  dove

不利于普遍使用int64而不是int(c)

  •  3
  • dove  · 技术社区  · 16 年前

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

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

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

    除了业绩,我还想听听其他不利因素。另外,这些值也可能通过Web服务及时向第三方公开。

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

    4 回复  |  直到 14 年前
        1
  •  3
  •   Mecki    16 年前

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

        2
  •  4
  •   Ady    16 年前

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

    在32位CPU上,64位整数将更占用处理器资源来执行计算。

    还有明显的内存使用。

        3
  •  2
  •   Jon Skeet    16 年前

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

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

        4
  •  1
  •   andy    16 年前

    便携性…如果你要便携式的话,C并不是真正的通用语言,所以这对你来说可能是没有意义的?