Java использует байт-код. В C #, хотя он использует IL в качестве промежуточного шага, всегда компилируется в собственный код. IL никогда напрямую не интерпретируется для выполнения, как байт-код Java. Вы можете даже предварительно скомпилировать IL перед распространением, если действительно хотите (подсказка: производительность обычно лучше в долгосрочной перспективе , если вы этого не сделаете).
Идея, что C # медленен, смешна. Некоторые из компонентов winforms работают медленно, но если вы знаете, что делаете, сам C # - очень быстрый язык. В наше время все сводится к алгоритму; Выбор языка не поможет вам, если вы внедрите плохую пузырьковую сортировку. Если C # поможет вам использовать более эффективные алгоритмы более высокого уровня (и по моему опыту это обычно делает), это превзойдет любые другие проблемы со скоростью.
На основании ваших правок я также хочу еще раз объяснить (типичный) путь компиляции.
C # компилируется в IL. Этот IL распространяется на локальные машины. Пользователь запускает программу, и эта программа затем JIT-компилируется в собственный код для этой машины один раз . В следующий раз, когда пользователь запускает программу на этом компьютере, он запускает полностью нативное приложение. Есть также оптимизатор JIT, который может немного запутать, но это общая картина.
Причина, по которой вы делаете это таким образом, состоит в том, чтобы позволить отдельным машинам оптимизировать время компиляции в соответствии с этим компьютером. В среднем вы получаете более быстрый код, чем если бы вы раздали всем одно и то же полностью скомпилированное приложение.
Относительно декомпиляции:
Первое, что нужно отметить, это то, что вы можете предварительно скомпилировать в нативный код перед распространением, если вы действительно этого хотите. На данный момент вы близки к тому же уровню, как если бы вы распространяли нативное приложение. Однако это не остановит решительного человека.
Это также в значительной степени неправильно понимает экономику в игре. Да, возможно, кто-то может перепроектировать вашу работу. Но это предполагает, что вся ценность приложения заключается в технологии. Программисту очень свойственно переоценивать код и недооценивать выполнение продукта : дизайн интерфейса, маркетинг, связь с пользователями и текущие инновации. Если вы все сделаете правильно, небольшая дополнительная конкуренция поможет вам так же, как и больно, создавая спрос на вашем рынке. Если вы сделаете это неправильно, сокрытие вашего алгоритма не спасет вас.
Если вас больше беспокоит то, что ваше приложение появляется на варез-сайтах, вы еще больше ошибаетесь. Это все равно будет там. Гораздо лучшая стратегия состоит в том, чтобы привлечь этих пользователей .
На данный момент самым большим препятствием для усыновления (imo) является то, что распространяемый фреймворк стал гигантским по размеру. Надеемся, что они решат эту проблему в относительно близком релизе.