Комментарии 8
Вы все еще меряете время через DateTime.Now?
Тогда мы идем к вам!
Рекомендации для написания бенчмарков: habrahabr.ru/post/191636
Тогда мы идем к вам!
Рекомендации для написания бенчмарков: habrahabr.ru/post/191636
Спасибо за комментарий, с удовольствием прочитал статью. Стал немного умнее)
На самом деле многие из этих рекомендаций я выполнил при запуске тестов, попробую выполнить все и еще раз выложу результаты. Спасибо!
На самом деле многие из этих рекомендаций я выполнил при запуске тестов, попробую выполнить все и еще раз выложу результаты. Спасибо!
И вот что получилось в итоге:
Да, немного отличаются.
Результаты
Cache warming results:
00:00:00.0505219
00:00:00.0491484
00:00:00.0527804
00:00:00.0586028
00:00:00.0595744
00:00:00.0573599
00:00:00.0678498
00:00:00.0560197
00:00:00.0591139
00:00:00.0382205
00:00:00.0602378
00:00:00.0862110
00:00:00.0632895
00:00:00.0584091
00:00:00.0556713
00:00:00.0572194
00:00:00.0544349
00:00:00.0750407
00:00:00.0579586
00:00:00.0561487
Test results:
00:00:00.0640218
00:00:00.0558972
00:00:00.0612732
00:00:00.0560300
00:00:00.0547193
00:00:00.0556158
00:00:00.0558210
00:00:00.0554421
00:00:00.0632168
00:00:00.0611355
00:00:00.0539173
00:00:00.0594863
00:00:00.0549896
00:00:00.0585462
00:00:00.0598485
00:00:00.0586522
00:00:00.0560457
00:00:00.0568806
00:00:00.0784523
00:00:00.0521756
Milliseconds need for 10KK boxing operations: 58,60835
Да, немного отличаются.
Мой любимый пример ненужного боксинга:
против
где b допустим Int32.
string a = b + "ms";
против
string a = b.ToString() + "ms";
где b допустим Int32.
Resharper еще заботливо говорит, что вызов ToString()
Прав ли R#: call to .ToString() is redundant?
PS: Это ответ на комментарий habrahabr.ru/post/210108/#comment_7236630
Это значимый тип данных. Значение переменной valType будет храниться в стэке.
Дальше можно не читать.
100 раз говорили: значимые типы почти всегда размещаются в куче, т.к. являются полями классов. А на стеке размещаются только локальные переменные значимого типа. А ссылочные типы далеко не всегда размещаются в куче, см. stackalloc. Поэтому это утверждение не просто ошибочное, а в корне неверное.
Эрик давно уже статью целую наваял: если бы это было так, были бы «стековые» и «кучевые» типы данных (stack and heap values), а не «значимые» и «ссылочные».
Советую ознакомиться:
blogs.msdn.com/b/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx
blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
На мгновение быстрее: измеряем время упаковки и распаковки значимых типов данных