Microsoft.VisualBasic.Now与System.DateTime.Now的区别

6

使用Microsoft.VisualBasic.DateAndTime.Now和System.DateTime.Now有什么区别吗?

我记得看过一些文章说MS.VB命名空间仅用于传统用途,并且比使用本机.net类要慢得多。

5个回答

10

有些情况下,使用VB命名空间可能会更慢(因为添加了功能和/或灵活性,而不是因为微软想让VB变慢)。

但在DateAndTime.Now的情况下,这并非如此。这只是DateTime.Now调用的一个包装器。

我怀疑JIT编译器会将其内联,因此它不会使您的代码变慢(当编译Release版本时)。

证明:这是DateAndTime.Now的IL:

.method public specialname static valuetype [mscorlib]System.DateTime get_Now() cil managed
{
    .maxstack 1
    .locals init (
        [0] valuetype [mscorlib]System.DateTime time)
    L_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
    L_0005: ret 
}

这与以下完全相同:

Return DateTime.Now

2

我不知道它是否更慢(并且怀疑它足够重要);但是我已经做了足够的VB和C#之间的移植,避免在System命名空间有等效项时使用VisualBasic命名空间。这只是让人担心的另一件事。


2

您需要注意这一点。现在属性不会有问题,它返回DateTime.Now。但是其他方法中存在细微差别,例如Year()方法。它使用当前日历的GetYear()方法,该方法不一定与DateTime.Now.Year属性相同。根据程序运行的位置,例如可能会给出自耶路撒冷圣殿被摧毁以来的年数。只有当您真正想要模拟遗留的VB6程序的行为时,才使用这些VB6兼容函数。


1

VB6函数返回了自某个参考点以来的小数天数;.net函数返回一个DateTime结构。


0

VB 命名空间的存在是为了让 VB 6 开发人员感到熟悉。

这类似于遗留系统,但又不完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接