2010-12-06 1 views
9

Доброе утро,C++/CLI производительность по сравнению с Native C++?

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

спасибо.

+0

Я думаю, CIL делает то же самое, но неявно. – 2010-12-06 10:41:18

+0

Почему вы передаете слова один за другим? Передайте весь txt. – 2010-12-06 10:51:25

ответ

4

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

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

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

+0

Небезопасный код C# примерно в два раза медленнее, чем функция C, которую я импортирую с помощью DllImport. – Miguel 2010-12-06 13:55:39

1

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

1

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

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