Измерение времени выделения памяти - PullRequest
1 голос
/ 29 марта 2012

Я хочу измерить распределение памяти по времени, используя этот код:

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 (случайным образом)Зачем?Или это правильный способ измерения?

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Вполне возможно, правильный показатель времени.Выделение памяти на самом деле не представимо в форме O (x), к которой привыкли люди;размер блока в действительности не меняет время выделения, если объем памяти доступен, он выделяется.

Для более подробного и хорошо написанного ответа см. этот вопрос: Сложность временираспределения памяти

Но для дальнейшего использования вы можете изучить класс 'System.Diagnostics.StopWatch', он содержит несколько полезных методов для измерения прошедшего времени.http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

0 голосов
/ 29 марта 2012

DateTime не достаточно точен, чтобы измерить такие небольшие промежутки времени. Для этого вы можете использовать секундомер из пространства имен 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 динамичен в том смысле, что он может в любое время определить выполнение тяжелых операций.

Кроме того, реальные проблемы с производительностью связаны с сборкой мусора, а не с выделением ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...