|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TСкорее всего что-то в коде было такое что пишется одинаково, но означает не одно и тоже. Но при этом работает одинаково! Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Все переменные - типа int. Что может измениться при переносе этого фрагмента из C# в C++? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 10:36 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TAR®Повторяю: основной рабочий цикл идентичен, с точностью до пробелов слева. Наверно поэтому и тормозит. С/С++ и C# это разные ЯП, хоть и с похожим синтаксисом. Скорее всего что-то в коде было такое что пишется одинаково, но означает не одно и тоже. Например Код: c# 1.
С++ создаст копию s, а C# передаст ссылку. Второе намного быстрее. C# передаст ссылку на ссылку :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 11:37 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®Что может измениться при переносе этого фрагмента из C# в C++? Тут ничего. Затестил твой цикл. С++ быстрее. Результат: C++C#939 мс1145 мс Исходники Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
MSVC 2015 x86 Как я и подозревал - тормоз где-то в другом месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 11:59 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
ЕвгенийВC# передаст ссылку на ссылку :) Все-равно быстрее чем память выделять и туда копию делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 12:00 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TКак я и подозревал - тормоз где-то в другом месте. Если не затруднит, попробуйте заменить тело цикла на такое (и в C# и в C++) при тех же начальных значениях переменных Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Выросло ли время? И в C# и в C++? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 12:38 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima T AR®Что может измениться при переносе этого фрагмента из C# в C++? Тут ничего. Затестил твой цикл. С++ быстрее. Результат: C++C#939 мс1145 мс Исходники Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
MSVC 2015 x86 Как я и подозревал - тормоз где-то в другом месте.Тормоз C# обычно из-за проверки границ массивов. Если писать на C# unsafe с указателями, то отличий от C++ практически нет. В качестве теста рекомендую сортировку "пузырьком", реализовать три варианта: C++ , C# и C#+unsafe+указатели . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 12:44 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®Выросло ли время? И в C# и в C++? ТестC++C#До замены939 мс1145 мсПосле замены890 мс1402 мс ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 12:49 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Алексей КТормоз C# обычно из-за проверки границ массивов. Если писать на C# unsafe с указателями, то отличий от C++ практически нет. В качестве теста рекомендую сортировку "пузырьком", реализовать три варианта: C++ , C# и C#+unsafe+указатели . Это понятно. Замеры начались с обратного утверждения 20501935 AR®Тут решил вернуться к прошлому лету :) , а то новое что-то очень не торопится наступить, и вместо многопоточности на C# изобразить всё то же самое в 1 потоке в приложениьице командной строки, но на C/C++. Внимание: Результат практически вдвое хуже , чем на C# в 1 потоке ! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 12:56 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Вдогонку: тут делал тест во времена своей молодости. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 12:57 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TАлексей КТормоз C# обычно из-за проверки границ массивов. Если писать на C# unsafe с указателями, то отличий от C++ практически нет. В качестве теста рекомендую сортировку "пузырьком", реализовать три варианта: C++ , C# и C#+unsafe+указатели . Это понятно. Замеры начались с обратного утверждения 20501935 AR®Тут решил вернуться к прошлому лету :) , а то новое что-то очень не торопится наступить, и вместо многопоточности на C# изобразить всё то же самое в 1 потоке в приложениьице командной строки, но на C/C++. Внимание: Результат практически вдвое хуже , чем на C# в 1 потоке !Да я это не в упрёк. Просто обозначил факт, который в этом обсуждении, как мне показалось, не упоминался. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 13:02 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TAR®Выросло ли время? И в C# и в C++? ТестC++C#До замены939 мс1145 мсПосле замены890 мс1402 мс Очень интересно. У меня вырастает и в C# и в C++. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 13:26 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®Очень интересно. У меня вырастает и в C# и в C++. Компилятор С++ какой? У меня MSVC 2015 компилирую в x86. Для запуска везде дави Ctrl+F5, так без отладчика запускается. Странно что в C# медленнее стало, возможно С++ такую конструкцию качественнее откомпилировал. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 13:43 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
VS2010, компилирую из среды, запускаю не из среды. Содержательно оба варианта кода делают одно и то же. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 14:09 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
AR®, не знаю что там клок делает, но sw то тормазни перед Console.WriteLine ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 14:40 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Алексей КВдогонку: тут делал тест во времена своей молодости. Позапускал код по ссылке. Написал safe. Результат ЯПВремя мсС++6047unsafe C#5943safe C#5196 Вот такая интересная картина. Рихтер писал: если компилятор видит что счетчик цикла не может выйти за границы массива, то внутри проверки границ не делаются. Исходник safe C# Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
PS На С++ улучшить время не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 14:52 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
ЕвгенийВAR®, не знаю что там клок делает, но sw то тормазни перед Console.WriteLine clock() в виндовсе дает время с момента старта проги в мс. sw.Stop() на замер не влияет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 15:01 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TРихтер писал: если компилятор видит что счетчик цикла не может выйти за границы массива, то внутри проверки границ не делаются.Я тоже про это где-то читал, но тогда на практике у меня это не подтвердилось. Возможно с тех пор что-то поменялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 17:38 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Меня результаты удивили. Как safe C# обогнал unsafe и С++ почти на 15%! Это уже не погрешность измерения. Проц i7-6700K Продолжил исследования, запустил тесты на других компах: i7-3770K все три варианта дали примерно одно и тоже, разброс <1%. i3-2310M C++ чуть вперед вырвался exe одни и те же, в архиве вместе с исходниками. Какие выводы сделать даже не знаю. MS затачивает компилятор под свежие процы? Интел затачивает процы под .Net? Что еще проверить? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 19:23 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima T, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2017, 21:53 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
На i7-3770K у меня похожая картина. Разбег <1%, т.е. примерно одинаково. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Непонятный реультат на i7-6700K Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 09:24 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima T Какие выводы сделать даже не знаю. MS затачивает компилятор под свежие процы? Интел затачивает процы под .Net? Что еще проверить? Посмотри полученный машинный код. jit создает код в зависимости от имеющегося проца, С++ имеет 100500 флагов компиляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:32 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TМеня результаты удивили. ... Какие выводы сделать даже не знаю. Что же тогда удивительного в моих результатах с C++ из VS2010? Dima TMS затачивает компилятор под свежие процы? Я этого не исключаю © :). В Ваших результатах меня удивило, что мой другой вариант тела цикла привёл на C++ к улучшению (пусть и не очень большому), а на C# - к ухудшению. У меня с ним хуже и там, и там. Видимо, за C++ серьёзно "взялись" к выпуску VS2015. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 11:06 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
Dima TКакие выводы сделать даже не знаю. Выводы нижно делать правилные: Даже код для time-critical приложений можно писать на С#. Суть в том что промежуточный байткод может быть оттранслирован в оптималный машинный код для конкретного процессора. С нативным машинным кодом такого фокуса уже не получится. Читать ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 12:01 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
mikronDima TКакие выводы сделать даже не знаю. Выводы нижно делать правилные: Даже код для time-critical приложений можно писать на С#. Суть в том что промежуточный байткод может быть оттранслирован в оптималный машинный код для конкретного процессора. С нативным машинным кодом такого фокуса уже не получится. Читать Затраты на поддержку безопасного кода в .Net таки дают о себе знать. Даже если проверка границ массивов где-то и выносится на этап компиляции, то далеко не везде. Не думаю, что компиляция под конкретный процессор может компенсировать эти затраты. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 12:24 |
|
Максимальный размер ConcurrentDictionary в 32-битных приложениях
|
|||
---|---|---|---|
#18+
mikron Читать Там мнения разделились. Так что пока вопрос открыт. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 12:32 |
|
|
start [/forum/topic.php?fid=20&msg=39457907&tid=1399876]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 285ms |
total: | 461ms |
0 / 0 |