Microsoft.VisualBasic.Now vs System.DateTime.Now

时间:2010-10-08 14:00:44

标签: vb.net datetime

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

我似乎记得读过一些说MS.VB命名空间仅用于遗留用途的东西,并且比使用原生的.net类慢得多。

5 个答案:

答案 0 :(得分:9)

在某些情况下,使用VB命名空间可能会更慢(因为增加了功能和/或灵活性,而不是因为MS希望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

答案 1 :(得分:2)

我不知道它是否更慢(并且怀疑它是否足够重要);但是我已经在VB和C#之间进行了足够的移植,并且在系统等效物可用时返回以避免VisualBasic命名空间。这还需要担心一件事。

答案 2 :(得分:2)

你必须注意这一点。 Now属性不是问题,它返回DateTime.Now。但是在其他方面存在细微差别,例如Year()方法。它使用当前日历的GetYear()方法,该方法不必与DateTime.Now.Year属性相同。根据你的计划运行的地方,这可能会例如给出自耶路撒冷圣殿被毁坏以来的年数。仅当您真的想要模拟旧版VB6程序的行为时才使用这些VB6 compat函数。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

VB名称空间让VB 6开发人员有宾至如归的感觉。

这与遗产类似,但并不完全。