На каких сферах следует сосредоточиться при тестировании производительности C # и Java (выполнения)? - PullRequest
3 голосов
/ 20 ноября 2011

Я работаю над школьным проектом, где мне нужно разработать гипотезу для проверки или фальсификации.Моя гипотеза состоит в том, что время выполнения C # быстрее, чем время выполнения Java в Windows, потому что C # разработан Microsoft.Некоторые из вас, возможно, уже знают ответ на эту гипотезу, и, вероятно, были исследования, которые документируют это.Но это не имеет значения, мне просто нужно сделать этот проект самому.

Так что я хотел бы, чтобы некоторые идеи были сфокусированы на том, как их измерять?

PS Это не должно бытьслишком сложно.

Спасибо!

Ответы [ 5 ]

4 голосов
/ 20 ноября 2011

Некоторые вещи, которые я бы протестировал:

Время, чтобы открыть файл, написать строку и закрыть его.

Время открытия сетевого подключения.

Время, чтобы открыть соединение с базой данных, записать в него один байт и затем закрыть соединение.

Время создания и заполнения массива, стандартного ArrayList и универсального ArrayList.

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

Время для запуска большого цикла.

2 голосов
/ 20 ноября 2011

Проблема с этой гипотезой заключается в том, что мне нужно найти только один контрпример, чтобы опровергнуть его.И есть буквально неограниченное количество программ, которые вы можете написать, поэтому невозможно проверить вашу гипотезу.

Даже если вы сузите ее, скажем, до «C # быстрее, чем Java при сортировке», я все еще могунаписать неограниченное количество программ, которые выполняют сортировку.И опять же, только один из них должен быть быстрее в своей реализации Java, и ваша гипотеза не соответствует действительности.

Проблема other заключается в том, что ни в C #, ни в Java «нет скорости».

Компилятор Microsoft C # и их реализация .NET в своих последних версиях имеют определенные характеристики производительности, а последняя версия Oracle JVM и последняя версия компилятора Java имеют определенные характеристики производительности, но это говорит о том, чтоничего о C # или Java в общем .Как насчет компилятора C # 2.0?А как насчет компилятора Mono C #?

Сравнение производительности языков не имеет смысла.У языков нет скорости.

0 голосов
/ 20 ноября 2011

Моя гипотеза состоит в том, что время выполнения C # быстрее, чем время выполнения Java в Windows, потому что C # разработан Microsoft

Ваша формулировка здесь не очень ясна.Является ли подозреваемая причина частью гипотезы?Тогда вам нужно будет проверить, как получился C #, если бы он был написан кем-то, кроме Microsoft.Чтобы сделать это с любой степенью надежности, потребовалось бы на самом деле реализовать C # для Windows с нуля.

Более того, утверждение «Время выполнения C # быстрее, чем время выполнения Java в Windows» не является четко определенным: время выполнения чего?Если вполне вероятно, что есть области / программы, где C # превосходит Java, и другие области, где Java превосходит C #.

Чтобы сделать гипотезу проверяемой, вам необходимо сузить ее, например, до конкретной программы, котораяреализован практически без изменений на любом языке программирования, на конкретном входе, на конкретной реализации JVM / CLR, на конкретном компьютере.Да, это утверждение будет не таким полезным, но, по крайней мере, его можно проверить.

0 голосов
/ 20 ноября 2011

Ну, прежде всего прочитайте это здесь - да, это включает в себя одну связанную статью (ну это здорово ). Если вы этого не сделаете, мы можем остановиться прямо здесь, потому что вы будете только измерять мусор. И да, эта проблема в некоторой степени существует и для C #.

Также это зависит от того, что вы измеряете с помощью C # - использование небезопасного кода может дать хорошие улучшения производительности за счет практически всех недостатков неуправляемых языков. И какие переключатели вы используете для программ - не использование -server для Java было бы действительно хорошей идеей, чтобы C # выглядел лучше, чем есть;)

Какие разумные ориентиры? Ну, как правило, приятно показывать простую математическую задачу (и оба JIT, вероятно, неплохо справляются с этой задачей, поэтому не надейтесь на слишком большие различия - это тоже ответ). Тогда, может быть, некоторые тесты, которые показывают, насколько хороши JIT в оптимизации вещей - CSE, виртуальное встраивание и т. Д. Это, вероятно, зависит от того, сколько вы знаете об оптимизации в целом.

Также, безусловно, интересно проверить задержку / время для полного / частичного запуска сборки мусора.

0 голосов
/ 20 ноября 2011

Я бы лично сосредоточился на некоторых из самых обычных и повседневных задач - циклы, строковые операции, массивы / списки, целочисленные вычисления и вычисления с плавающей точкой, файловые операции.Для измерений вы можете использовать Stopwatch в C # (самое точное решение для измерения в .NET).Я не знаю Java, но есть также класс StopWatch, и его назначение должно быть таким же.

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