Я хочу создать простой HTTP-прокси-сервер, который выполняет некоторую очень базовую обработку в заголовках http (т. Е. Если заголовок x == y, do z). Возможно, серверу потребуется поддержка сотен пользователей. Я могу написать сервер на C# (довольно просто) или C++ (намного сложнее). Однако, будет ли версия C# иметь такую же производительность, как версия на C++? Если нет, будет ли разница в производительности быть достаточно большой, чтобы не было смысла писать ее на C#?C# Производительность для прокси-сервера (vs C++)
ответ
Вы можете использовать небезопасные C# код и указатели в критических точках узких мест, чтобы сделать его работать быстрее. Они очень похожи на код на C++, и я считаю, что он выполняет так же быстро.
Но большую часть времени C# уже JIT-ted до uber-fast, я не верю, что будет много различий, как с тем, что все сказали.
Но одна вещь, которую вы, возможно, захотите рассмотреть, - это: Строковые операции управляемого кода (C#) довольно медленны по сравнению с эффективными использованием указателей на C++. Есть больше трюков оптимизации с указателями C++, чем с строками CLR.
Я думаю, что раньше я делал некоторые тесты, но не могу вспомнить, где я их разместил.
Прокси-сервер, который вы описываете, будет обрабатывать в основном строковые данные, и я думаю, что его разумно реализовать на C#. В вашем примере,
медленная часть может быть на самом деле делать то, что «г» есть, и вы должны сделать эту работу независимо от языка.
Почему вы ожидаете гораздо более высокой производительности от приложения C++?
Неправильное замедление, добавленное приложением C#, когда вы делаете это правильно. (не слишком много сброшенных ссылок, частое создание/удаление объекта за вызов и т. д.)
Единственный раз, когда приложение C++ действительно превосходит эквивалентное приложение C#, это когда вы можете выполнять операции очень низкого уровня. Например. литье необработанных указателей памяти, встроенный ассемблер и т. д.
Компилятор C++ может быть лучше при создании быстрого кода, но в большинстве случаев это пропадает в большинстве приложений. Если у вас действительно есть часть приложения, которое должно быть ослепительно быстрым, попробуйте написать вызов C для этой горячей точки.
Только в том случае, если большая часть системы ведет себя слишком медленно, вы должны рассмотреть возможность ее записи в C/C++. Но есть много подводных камней, которые могут убить вашу производительность в вашем коде на C++.
(TLDR: Эксперт C++ может создать «быстрый» код как C# эксперт, но ++ программист посредственно C может создать медленный код, чем посредственная C# один)
В моем опыте разработка и реализация имеет гораздо больше что касается производительности, чем выбор языка/рамки (однако, применяются обычные предостережения: например, не пишите драйвер устройства на C# или java).
Я бы не подумал дважды о написании типа программы, которую вы описываете на управляемом языке (будь то Java, C# и т. Д.). В наши дни производительность, которую вы получаете от использования языка более низкого уровня (с точки зрения близости к оборудованию), часто легко компенсируется возможностями среды выполнения управляемой среды. Конечно, это идет от разработчика C#/Python, так что я не совсем беспристрастные ...
Если вам нужен быстрый и надежный прокси-сервер, может возникнуть смысл попробовать некоторые из тех, которые уже существуют. Но если у вас есть пользовательские функции, которые необходимы, тогда вам, возможно, придется создавать свои собственные. Возможно, вам захочется собрать дополнительную информацию о ожидаемой нагрузке: сотни пользователей могут составлять несколько запросов в минуту или сто запросов в секунду.
Предполагая, что вам нужно обслуживать до 200 qps на одной машине, C# может легко удовлетворить ваши потребности - даже языки, известные как медленные (например, Ruby), могут легко выкачать несколько сотен запросов в секунду.
Кроме того, есть другие причины выбора C#, например. гораздо проще писать переполнение буфера на C++, чем на C#.
Я ожидал бы, что версия C# будет почти такой же быстрой, как C++, но с меньшим объемом памяти. В некоторых случаях управляемый код на самом деле намного быстрее и использует меньше памяти по сравнению с не оптимизированным C++. Код C++ может быть быстрее, если он написан экспертом, но он редко оправдывает усилия.
В качестве побочного примечания я могу вспомнить спектакль «Конкурс» в блогосфере между Майклом Капланом (C#) и Раймондом Ченом (C++), чтобы написать программу, которая делает то же самое. Раймонд Чан, который считается одним из лучших программистов в мире (Joel), смог быстрее написать C++ после долгой перезаписи большинства кода.
Ваш http-сервер будет работать на выделенной машине? Если да, я бы сказал, идите с C#, если вам это проще. Если вам нужно запустить другие приложения на одном компьютере, вам нужно будет учитывать объем памяти вашего приложения и тот факт, что GC будет работать в «случайные» времена.
- 1. .Net vs C++ (производительность)
- 2. Производительность Java 1.6 vs C++?
- 3. Производительность вызовов C++ для кода Java vs Код C#
- 4. Производительность - Python vs. C#/C++/C чтение char-by-char
- 5. C++ Pimpl vs Чистая производительность виртуального интерфейса
- 6. Try-Catch vs Если производительность в C#
- 7. Производительность RegEx в Objective-C vs Python
- 8. Swift vs Objective-C: Производительность приложения
- 9. C# Parallel Vs. Производительность резьбового кода
- 10. C# DataTable vs Некоторая общая производительность коллекции
- 11. String vs SecureString Производительность в C#?
- 12. производительность Objective C NSArray Vs NSMutableArray
- 13. map vs multimap in C++ (производительность)
- 14. C vs C++ (Objective-C vs Objective-C++) для iPhone
- 15. C++ производительность кода
- 16. C++ vs C# побитовые операции в 64-битных ints - производительность
- 17. C# vs (скомпилировано) Производительность PHP для вычислительного кода?
- 18. Как улучшить производительность редактора VS 2012 для WPF, приложение C#
- 19. C против C++ для численного моделирования (производительность)
- 20. Виртуальная машина для песочницы для приложения (C++ vs. C#)
- 21. C# - Производительность combobox
- 22. Производительность System.IO.File vs System.IO.FileStream
- 23. C# vs C++ security
- 24. Производительность: NaCl vs Emscripten
- 25. OpenCV C vs C++
- 26. Javascript - Аргументы Vs Вложенные функции Vs Производительность
- 27. Производительность fopen vs stat
- 28. Decompile C# vs C++
- 29. C# VS C++: для проекта IM
- 30. C++ vs C# для программирования GUI