Gre*_*edo 0 excel optimization vba types
有时我会将某些系统的状态存储为整数。我经常发现自己对这些状态使用较小的值(例如 1-10),因为系统相对简单。
一般来说,存储小正整数的变量的最佳声明是什么 - 其中最佳定义为最快的读/写时间和最小的内存消耗?这里将Small定义为 1-10,尽管整数存储方法及其范围的完整列表会很有用。
本来我Integer表面上用的是as,它占用的内存更少。但我后来了解到事实并非如此,因为它会默默地转换为 Long
然后我Long出于上述原因使用了它,并且知道它使用的内存比Double
我后来发现Byte并改用了它,因为它存储较小的整数(0-255 或 256,我不记得是哪个),而且我猜它的分钟名称使用的内存较少。但我不太信任 VBA,并且想知道这里是否也进行了任何内部类型转换。
Boolean我以为只是0或1,但我读到任何非零数字都会转换为True,这是否意味着它也可以存储数字?
\n\n\n最初我使用 Integer,因为从表面上看,它使用的内存较少。但我后来了解到事实并非如此,因为它会默默地转换为 Long
\n
是的,由于这种转换,使用Integerover没有任何优势,但在与旧的 16 位 API 通信时可能是必要的。\n另请阅读“为什么使用整数而不是长整型?”LongInteger
\n\n\n然后我
\nLong出于上述原因使用了它,并且知道它使用的内存比Double
您不会在Long或之间做出决定Double,因为其中一个使用较少的内存。您在它们之间做出决定,因为 \xe2\x80\xa6
Double)Long)在这种特定情况下决定内存使用是一个非常糟糕的主意,因为这些类型根本不同。
\n\n\n\n\n我后来发现了 Byte 并转向了它,因为它存储较小的整数(0-255 或 256,我不记得是哪个),而且我猜它的分钟名称使用的内存较少。但我不太信任 VBA,并且想知道这里是否也进行了任何内部类型转换。
\n
我没有看到任何使用 Office/Excel 并通过使用而Long不是Byte从 1 到 10 进行迭代而遇到任何内存问题的情况。如果您需要将其限制为 255(一些旧的 API,等等),那么您可以使用Byte。如果没有必要,我会使用它Long只是为了灵活,不会遇到任何编码问题,因为您需要记住哪些计数器是 only Byte,哪些是Long.
\n例如 如果我用于i迭代,我会期望Long. Byte我认为在这种情况下使用没有任何优势。
尽可能保持简单。不要仅仅因为你可以就做人们意想不到的奇怪事情。避免未来的编码问题比占用一(或三个)字节的内存更值得。有时,编写良好的人类可读和可维护的代码比编写更快的代码更有价值,特别是如果您无法注意到差异(在这种情况下您确实无法注意到)。可读性差的代码迟早会导致错误或漏洞。
\n\n\n\n\n我以为布尔值只是0或1,但我读到任何非零数字都会转换为True,这是否意味着它也可以存储数字?
\n
不,那是错误的。布尔值是-1forTrue和0for False。但请注意,如果您将例如 a 转换Long为Booleannot , 0那么它将自动转换并产生True。
但Boolean在VBA中明确定义为:
0 = False\n-1 = True\nRun Code Online (Sandbox Code Playgroud)\n