2012-06-20 2 views
4

Я медленно создаю библиотеку кода для использования в нескольких приложениях. Некоторым кодом является обработка изображений и ранее существовавших форматов сообщений (преобразованных из C++), поэтому требуется небезопасный код.C# Смешанная небезопасная/безопасная библиотека

Любые причины, по которым я не должен вообще смешивать небезопасный и безопасный код в той же библиотечной сборке больше, чем мне нужно?

Другими словами: следует ли хранить чистую библиотеку и собирать небезопасный код в другую библиотеку/библиотеки?

Я ценю, что есть проблемы доверия, которые следует учитывать при использовании «небезопасных» библиотек, но поскольку эти функции имеют решающее значение для большинства моих приложений, действительно ли это имеет значение? Любой из моих кодов, безопасный & небезопасен, доверен или ему не доверяют, и мое приложение не будет запущено. Или я пропущу точку?

+0

«так небезопасный код не требуется» Я бы так не был уверен в этом. Вы обнаружите, что с небольшим «готовым» мышлением вы можете в значительной степени преобразовать старый код на C++ в безопасный код C#. – Polity

+0

Правда. С другой стороны, у меня есть несколько случаев кода на C/C++, который делает шифрование и форматирование данных, которые я бы не стал возиться со слишком много. Этот код сильно зависит от обработки указателей, поэтому при преобразовании в C# мне нужно переходить в области небезопасного кода на порт с минимальными изменениями. FWIW Я думаю, что чтение байтового массива из потока памяти - довольно хороший способ переходить через данные в память. –

+0

Кроме того, при работе с пиксельными данными непосредственно в растровых изображениях, как представляется, для лучшей производительности рекомендуется получить данные пикселов в объект BitmapInfo и переходить через пиксели через указатель на небезопасный код. Во всяком случае, это тот код, который у меня есть на данный момент. Возможно, однажды я найду какое-то время для повторной реализации безопасным способом ... –

ответ

4

В теории вы можете развить в безопасном коде, что вам нужно, но давайте предположим, что у вас есть веские причины, чтобы использовать небезопасный код :)

В части коды, которые вы запускаете небезопасный код вы рискуете забыть для освобождения память и т. д., поэтому, если вы хорошо управляете памятью, у вас не должно быть проблем. Когда у вас есть проект C# с использованием COM + dll, вы делаете это все время. В вашем случае лучше, потому что вы владеете всем кодом, чтобы вы могли исправить любую утечку памяти, если сможете ее обнаружить.

Если собрать все небезопасный код в отдельной библиотеке

ПРОФИ

  • Вы можете создать новую безопасную библиотеку в будущем
  • Если вы видите, что дллы неудачи на выполнения журналов вы сможет легче изолировать источник проблемы.

СВОД

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

Так что честное решение за вами. Если бы я был вами, я разделил бы небезопасный код на другой проект, чтобы иметь возможность заменить его безопасным кодом, если это понадобится.