使用Microsoft.VisualBasic.DateAndTime.Now和System.DateTime.Now有什么区别吗?
我记得看过一些文章说MS.VB命名空间仅用于传统用途,并且比使用本机.net类要慢得多。
有些情况下,使用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
我不知道它是否更慢(并且怀疑它足够重要);但是我已经做了足够的VB和C#之间的移植,避免在System命名空间有等效项时使用VisualBasic命名空间。这只是让人担心的另一件事。
您需要注意这一点。现在属性不会有问题,它返回DateTime.Now。但是其他方法中存在细微差别,例如Year()方法。它使用当前日历的GetYear()方法,该方法不一定与DateTime.Now.Year属性相同。根据程序运行的位置,例如可能会给出自耶路撒冷圣殿被摧毁以来的年数。只有当您真正想要模拟遗留的VB6程序的行为时,才使用这些VB6兼容函数。
VB6函数返回了自某个参考点以来的小数天数;.net函数返回一个DateTime结构。
VB 命名空间的存在是为了让 VB 6 开发人员感到熟悉。
这类似于遗留系统,但又不完全相同。