Bea*_*ear 0 javascript c# datetime
我发现一些代码看起来像这样:
var obj = new SomeClass();
obj.FirstProperty = Magic.GetFirstProperty();
//...
obj.CreateDate = DateTime.Now;
obj.ModificationDate = obj.CreateDate;
Run Code Online (Sandbox Code Playgroud)
有很多属性,所以我决定重构该代码并使用对象初始化器.
var obj = new SomeClass
{
FirstProperty = Magic.GetFirstProperty();
//...
CreateDate = DateTime.UtcNow,
ModificationDate = DateTime.UtcNow
};
Run Code Online (Sandbox Code Playgroud)
在对象初始化块中将属性从一个重写到另一个是不可能的(据我所知)并且在块外看起来很糟糕(在我看来).
我决定进行测试,并且我从600到1200个不同的对中进行了10 000 000次迭代.这是代码:
class Program
{
static void Main(string[] args)
{
int j = 0;
for (int i = 0; i < 10000000; i++)
{
var obj = new SomeClass
{
First = DateTime.UtcNow,
Second = DateTime.UtcNow
};
if (obj.First != obj.Second)
Console.WriteLine(j++ + " : " + GetDateInfo(obj.First) + " " + GetDateInfo(obj.Second));
}
Console.WriteLine("End of work");
Console.ReadKey();
}
static string GetDateInfo(DateTime dateTime) =>
$"{dateTime.Hour} : {dateTime.Minute} : {dateTime.Second} : {dateTime.Millisecond} - {dateTime.Ticks}";
}
internal class SomeClass
{
public DateTime First { get; set; }
public DateTime Second { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在这里我们有一些结果:
正如你所看到的,一些记录,如高光照,只有处理器滴答.
与此同时,除了谷歌浏览器中的内存泄漏外,javascript总是返回相同的值.这是代码:
var d,d2,n,n2;
for(var i=0; i<1000000; i++) {
d = new Date();
n = d.getTime();
d2 = new Date();
n2 = d.getTime();
if(n===n2)
console.log("equal");
else
console.log("not equal");
}
Run Code Online (Sandbox Code Playgroud)
您是否知道如何以适当的方式在.NET中解决该问题以及DateTime.Now如何实际工作?我非常好奇幕后发生的事情.我期待一次迭代/对象初始化中的两个值都是相等的.
您是否知道如何以适当的方式在.NET中解决该问题...
解决方案很简单,只需调用DateTime.UtcNow一次......
var dtNow = DateTime.UtcNow;
var obj = new SomeClass
{
FirstProperty = Magic.GetFirstProperty();
//...
CreateDate = dtNow,
ModificationDate = dtNow
};
Run Code Online (Sandbox Code Playgroud)
在循环的情况下,如果您希望所有值完全相同,则应dtNow 在循环开始之前分配.即只分配一次.
... DateTime.Now实际上是如何工作的?
简而言之,它会在您调用的点获取当前值DateTime.UtcNow.
不久之后,如果您真的感兴趣,请查看文档并进行进一步研究.
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |