Ссылка на большую DLL для одного метода - PullRequest
4 голосов
/ 22 декабря 2011

Я хочу использовать один метод из большой библиотеки классов DLL в C #.

Есть ли недостатки производительности или что-то еще?
Должен ли я «прочитать» код метода с помощью инструмента отражения и скопировать его в свой проект?

Обновление: пространство на жестком диске не является проблемой. Мое приложение - веб-приложение.

Ответы [ 4 ]

7 голосов
/ 22 декабря 2011

Есть ли какие-либо недостатки в производительности или что-то еще?

Единственный, который действительно важен, - это размер вашего распространяемого файла, если он имеет значение для вас.(Пользователи загружают файл 30 МБ вместо файла 2 МБ).Различия в производительности будут незначительными.Привязка сборки и проверка хэша строгого имени (если оно подписано) может занять больше времени, но вряд ли будет заметным для пользователя.

Должен ли я "прочитать" код метода с помощью инструмента отражения и copy-pasteэто к моему проекту?

Наверное, нет;большинство условий лицензирования запрещают реверс-инжиниринг и / или только частичное распространение.Проверьте лицензию, если таковая имеется, чтобы узнать, сможете ли вы сделать это в первую очередь.

3 голосов
/ 22 декабря 2011

Нет, оставьте это на усмотрение JIT-компилятора.Он уже избирательно относится к тому, что IL на самом деле превращается в машинный код, он только компилирует то, что фактически выполняется.Вы потеряете немного адресного пространства виртуальной памяти, но это ничего не стоит, это виртуально.Вы не платите за то, что не используете.

1 голос
/ 22 декабря 2011

Бах, экстремальный взлом нужен в крайних случаях. Скопируйте код методов (если это возможно) - это крайний взлом, imo.

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

  2. Если есть проблемы с памятью, и метод вызывается не слишком часто (что слишком часто зависит от вашего проекта), вы можете попробовать загрузить его во внешний AppDomain и выгрузите этот домен один раз, когда вы закончили с ним. Конечно, в этом случае вам нужно позаботиться об управлении IPC. Ничто не выходит на свободу в этом мире.

  3. Вы можете попробовать сделать то, что вы написали. Пользователь Reflector (или аналогичное программное обеспечение) получает методы кода C # и создает его клон. Все это предполагает, что этот метод не использует внутренние структуры DLL, состояния или что-то еще, потому что в этом случае история становится довольно сложной.

Удачи.

1 голос
/ 22 декабря 2011

Затраты на дисковое пространство, время загрузки и объем памяти.JIT-компилятор будет компилировать только то, что вы называете (возможно, из-за этого, но он, конечно, не скомпилирует всю сборку).Это ваш призыв о том, стоит ли вам «вырывать» нужный вам метод.Помните, конечно, что это может быть кроличья нора, поскольку я имею в виду, что этот метод, вероятно, будет использовать другие классы в своей сборке, поэтому он может быть не так прост, как вы думаете, для извлечения необходимого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...