Хорошее ole USING
:
SELECT Name, lastName, address, p.conID, postNum, region FROM people p
INNER JOIN countries USING (conID);
У меня нет точных цифр об эффективности JVM по сравнению с CLR, но разница, если таковая имеется, скорее всего, будет небольшой.
Однако, что касается языка, в C # действительно есть несколько более низкоуровневых конструкций, чем в Java, что допускает большую оптимизацию.
Такие конструкции, как:
Типы значений, определяемые пользователем. Быстро выделяется, никаких накладных расходов на память (что составляет 12 байтов на ссылочный тип как в CLR, так и в JVM, если я правильно помню). Полезно для вещей, которые естественным образом выражаются в виде значений, например векторов и матриц. Итак, математические операции. Объедините это с ref
и out
, чтобы избежать чрезмерного копирования этих типов с большими значениями.
Небезопасные блоки кода, которые позволяют немного более "близкую к металлу" оптимизацию. Например, в то время как CLR и JVM могут избежать проверки границ массива в некоторых ситуациях, во многих случаях они не могут, и каждый доступ к массиву требует проверки, находится ли индекс по-прежнему в границах массива. Использование небезопасного кода позволяет вам напрямую обращаться к памяти массива с помощью указателей и обходить любые проверки границ. Это может означать значительную экономию. А на очень низком уровне есть также stackalloc
, который позволяет размещать массивы непосредственно в стеке, тогда как обычный массив размещается в куче, что медленнее, но также удобнее. Лично я не знаю каких-либо практических приложений stackalloc
.
Истинные дженерики, в отличие от дженериков Java со стиранием типов, избегают ненужного преобразования типов и упаковки. Но если это проблема вашей Java-программы, это можно легко решить с помощью дополнительной работы (переключение, например, с ArrayList
на пользовательский тип, который внутренне использует буфер int []
.)
Это все кажется предвзято относящимся к C #, и я действительно думаю, что C # имеет более качественные языковые конструкции низкого уровня, которые могут помочь с производительностью. Однако я сомневаюсь, что эти различия действительно имеют значение (и они могут даже не применяться в вашем случае, использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, кросс-платформенный). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.
к пользовательскому типу, который внутренне использует буфер int []
.)
Все это кажется смещенным в сторону C #, и я действительно думаю, что C # имеет более качественные языковые конструкции низкого уровня, которые могут помочь с производительностью. Однако я сомневаюсь, что эти различия действительно имеют значение (и они могут даже не применяться в вашем случае, использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, кросс-платформенный). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.
к пользовательскому типу, который внутренне использует буфер int []
.)
Все это кажется смещенным в сторону C #, и я действительно думаю, что C # имеет более качественные языковые конструкции низкого уровня, которые могут помочь с производительностью. Однако я сомневаюсь, что эти различия действительно имеют значение (и они могут даже не применяться в вашем случае, использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, кросс-платформенный). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.
использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, переходить на кросс-платформу). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности. использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, переходить на кросс-платформу). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.К вашему сведению, вам конкретно не разрешается использовать код .NET framework для любой формы тестирования производительности без предварительного обращения в Microsoft и получения их одобрения.
Если вы действительно хотите опубликовать что-то, я подумал, что я дала бы вам знать.
По памяти MS сделала кое-что из книжного магазина, зоомагазина, что Java сделала первой, чтобы продемонстрировать, как их программное обеспечение может работать более эффективно с той же задачей. Я пытаюсь придумать это.
Да, есть тестовая игра, она хороша исчерпывающий и позволяет сравнивать множество разных вещей.
http://shootout.alioth.debian.org/
Единственное, что он использует моно вместо визуальной студии, но разница в производительности между ними сейчас очень мала .
в целом java обычно немного быстрее (в зависимости от того, что вы делаете), но использует гораздо больший объем памяти, и оба имеют примерно одинаковый размер исходного кода.
Я также подумал, что даст лучшую производительность. Но понятия не имею, как я могу провести тест производительности для этого.
Итак, хороший вопрос - надеюсь, мы все получим здесь какое-то руководство.
Я полагаю, что это эталонное тестирование должно быть подходом эталонного тестирования «со скидкой» (легко установить и запустить 1 разработчиком)?
У кого-нибудь есть такая информация, было бы здорово. Меня часто просят оценить технологии самостоятельно в короткие сроки.
Отличный bunn_online!
Тесты ... Практически все можно проверить с помощью теста, который соответствует вашим потребностям.
Кроме Чака Норриса. Чак Норрис будет медленнее и быстрее Х, если он того пожелает.
Еще один момент. Допустим, вы пришли к выводу, что Java быстрее. Означает ли это, что через 2 года он все еще будет быстрее?
Если Java на 5% быстрее, а .NET на 10% легче работать, что бы вы выбрали?
Есть много факторов, и производительность - лишь один из них. И если различия небольшие (я думаю, что они есть), то, вероятно, не самое главное.
Если вы не создаете что-то, что очень важно для производительности.
убедительное сравнение производительности между Java VM и .Net CLR - несбыточная мечта. Вы всегда можете провести тест производительности, в результате которого один будет выглядеть лучше другого, поскольку разработка сложной системы всегда предполагает компромиссы. Если сузить тип бенчмарков до скорости выполнения и памяти, можно найти статьи вроде этой: http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx это далеко не конец дискуссии.