2010-08-31 2 views
1

У меня есть несколько родных библиотек C++, и поэтому мне нужно выставить код управляемого (C#, в данном случае) кода. Мне нужно получить как можно больше скорости.Межплатформенный родной/управляемый интерфейс

Я хотел бы использовать некоторые классы для упрощения взаимодействия, что означает смешанный код, но это не является обязательным требованием.

Для чего требуется кросс-платформенная совместимость с Windows и Linux в худшем случае. Таким образом, стандарт/clr не может быть и речи.

Мои параметры:/clr: pure или/clr: safe, или вложение Mono в промежуточный слой. Мой вопрос в том, что будет лучше (лучшая производительность и простота разработки и последующее использование).

Библиотеки, с которыми мне нужно работать, сильно используют указатели и иногда общие указатели, что заставило меня подумать, что слой C++/CLI будет проще. Я написал простое приложение для тестирования использования некоторых объектов и скомпилировал его с/clr: pure, он не ссылался на собственный модуль, а выполнялся как под Windows, так и с Linux.

ответ

0

Использование P/Invoke.

Использование «чистого» сделает его намного медленнее, чем я видел, особенно число хрустящих вещей (шифрование).

+0

Pure автоматически генерирует вызовы p/invoke, поэтому я не понимаю, почему это будет медленнее. Просто признайте, что интерфейс дорог и не делает его болтливым (свести к минимуму количество вызовов, по возможности используйте примитивные типы). –

+0

Чисто определенно не должно быть медленнее, чем делать это на C#, так что это не проблема. Мой главный интерес - это управление указателями на C++ и любые преимущества, которые могут обеспечить слой интерфейса. Любые данные, которые идут между ними, будут указателями в 90% функций (и, таким образом, с легкостью и небольшими затратами на маршалинг), но иногда мне приходится работать с некоторыми неуправляемыми классами. Вот почему/clr: pure была мыслью, так как большинство документов предлагают использовать ограниченное использование неуправляемых библиотек и классов. – ssube

+0

C++/CLI в/clr: чистый режим обрабатывает указатели так же, как это делает C# в/небезопасном режиме. Конечно, в C++/CLI все еще намного проще, потому что вы можете просто # включить определение собственной структуры - на C# вам нужно воссоздать определение структуры с явными атрибутами раскладки. Тоже для функций, в C++/CLI просто #include заголовочный файл, в C# вам нужно писать объявления p/invoke и правильно их комментировать с атрибутами charset и т. Д. Но итоговая MSIL не должна сильно отличаться. –

Смежные вопросы