C# 内存分配的测量时间

C# 内存分配的测量时间,c#,memory-management,C#,Memory Management,我想使用以下代码测量时间内存分配: long AForMemory = DateTime.Now.Ticks; double[] massDoubleForMemory = new double[num]; long BForMemory = DateTime.Now.Ticks; long rezult = BForMemory - AForMemory; 但是,无论多少是num(100k或1M),rezult=0或10001(随机)。为什么?或者这是正确的测量方法吗?日期时间不够精确,无法

我想使用以下代码测量时间内存分配:

long AForMemory = DateTime.Now.Ticks;
double[] massDoubleForMemory = new double[num];
long BForMemory = DateTime.Now.Ticks;
long rezult = BForMemory - AForMemory;

但是,无论多少是
num
(100k或1M),
rezult
=0或10001(随机)。为什么?或者这是正确的测量方法吗?

日期时间不够精确,无法测量如此小的时间间隔。您可以在System.Diagnostics命名空间中使用秒表进行此操作

int num = 1024 * 1024;
Stopwatch sw = new Stopwatch();
sw.Start();
long AForMemory = DateTime.Now.Ticks;
double[] massDoubleForMemory = new double[num];
sw.Stop();
long elapsed = sw.ElapsedTicks;
如果您试图诊断某些类型的分配所产生的影响,那么您很可能找错了地方。NET中的分配可能非常快,也可能非常慢。例如,如果分配之前有一个垃圾回收,或者垃圾回收器需要保留一个新的内存块来满足您的请求,那么与gc回收器有足够的可用空间相比,请求本身可能需要很长时间。GC是动态的,它可以随时决定执行一些繁重的操作


除此之外,真正的性能问题来自垃圾收集,而不是分配。

这很可能是对时间的正确衡量。分配内存并不是人们习惯的O(x)形式的真正表现;块的大小并不会真正改变分配时间,如果内存量可用,它就被分配

要获得更详细和书面的答案,请参见以下问题:

但为了将来的参考,您可能需要研究“System.Diagnostics.StopWatch”类,它包含一些用于测量运行时间的好方法。

测量这一点有什么好处?这不是你能以任何方式影响的事情。