Производительность C ++ / CLI по сравнению с Native C ++? - PullRequest
11 голосов
/ 06 декабря 2010

Доброе утро,

Я пишу проверку орфографии, которая в данном случае критична для производительности. В связи с этим, и поскольку я планирую подключиться к БД и создать графический интерфейс с использованием C #, я написал процедуру вычисления расстояния редактирования в C и скомпилировал ее в DLL, которую я использую в C #, используя DllImport. Проблема в том, что Я думаю (хотя я, возможно, ошибаюсь), что сортировка слов одно за другим от String до char * вызывает много накладных расходов. В связи с этим я подумал об использовании C ++ / CLI, чтобы я мог работать с типом String в .NET напрямую ... Тогда у меня возникает вопрос, как производительность C ++ / CLI сравнивается с собственным кодом C для тяжелых математических вычислений и доступа к массивам?

Большое спасибо.

Ответы [ 3 ]

4 голосов
/ 06 декабря 2010

C ++ / CLI также должен будет выполнить маршалинг.

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

Что касается профиля производительности C ++ / CLI, то он действительно зависит от того, как он используется. Если вы компилируете в управляемый код (CIL) с помощью (/clr:pure), он не будет сильно отличаться от C #. Нативные функции C ++ в C ++ / CLI будут иметь характеристики производительности, аналогичные простым C ++. Передача объектов между собственной средой C ++ и средой CLI потребует некоторых затрат.

1 голос
/ 06 декабря 2010

Не думайте, что знаете, что нужно оптимизировать. Пусть выборка скажет вам.

Я сделал пару корректоров орфографии, и способ, которым я это сделал ( обрисовано в общих чертах здесь ), заключался в том, чтобы упорядочить словарь как три в памяти и искать его. Если количество слов велико, размер дерева можно значительно уменьшить, если использовать общие суффиксы.

1 голос
/ 06 декабря 2010

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

...