2010-03-11 4 views
5

Довольно много приложений поддерживают плагины.Есть ли максимальное количество сборок для приложения .NET?

Есть ли недостатки в наличии большого количества плагинов? Есть ли сладкое пятно, за пределами которого возможно ухудшение качества?

Какое наибольшее количество сборок вы видели в приложении?

ответ

1

Я когда-то работал над бэкэнд-каркасом, у которого было дерево зависимостей сборки более 2500 конечных точек. Это было отвратительно и потребовалось два часа.

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

+0

Вау, это, наверное, один из самых больших! Но здесь не проблема, так как мы используем IoC/DI и уменьшаем базовое число зависимостей для каждого плагина (в этом случае 2) – Kumar

1

У меня нет конкретной информации, но я уверен, что у вас может быть больше сборок, чем нужно, прежде чем вы увидите какое-либо ухудшение.

Сказав, что, это субъективное к ряду другим факторам, таким как «качество» сборок, системные ресурсы и т.д. и т.п.

1

Нет, нет сладкого пятна. Больше кода занимает больше времени для загрузки и компиляции JIT. Но это не обязательно предсказуемо, когда это происходит, это происходит по требованию. Максимум ограничивается доступным объемом виртуальной памяти на 32-битных машинах, размером файла подкачки на машинах x64.

1

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

Из-за различных проверок согласованности, которые CLR выполняет при загрузке сборок (например, проверка сильного имени) и вероятность того, что rebasing требуется, очень возможно, что наличие большого количества сборок может иметь значительные последствия для производительности.

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

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

  • Строгое имя ваших сборок и поместить их в GAC на время установки
  • Run NGEN на GAC'd сильные названные сборки во время установки
  • Укажите адрес нестандартную базы для различных библиотек, чтобы свести к минимуму перебазирования

для 1 и 2, они в значительной степени идут рука об руку. Прирост производительности NGEN может быть не полностью реализован, если сборки не находятся в GAC из-за сильной проверки имени. CLR может пропустить эту проверку для сборок в GAC.

Вот отличный MSDN article regarding application startup times.

+0

перебазирование не является проблема в соответствии с этой статьей http://msdn.microsoft.com/en-us/magazine/cc163610.aspx Отрывок - JIT-скомпилированный код не имеет перебазирование проблемы, так как адреса генерируются во время выполнения на основе того, где код помещается в память. Кроме того, MSIL редко затрагивается промахами базового адреса, поскольку ссылки MSIL основаны на токенах, а не на основе адресов. Таким образом, когда используется JIT-компилятор, система устойчива к базовым адресным коллизиям. – Kumar

+0

Да, но все мое дело было в использовании NGEN для * избегания * JIT. На код NGEN действительно влияет перезагрузка. Фактически, JIT выполняет всю работу, которую будет выполнять перезагрузка и многое другое. Поэтому избегать JIT является ключом к быстрому загрузке большого количества сборок. – Josh

+0

В любом случае, я знаю, что это сообщество wiki, и все, но я не думаю, что есть что-то о моем ответе, который оправдывает голос голосования (не утверждая, что это был вы, просто говоря ...) – Josh

0

Один видимый предел использования памяти. Каждый модуль будет загружен в память. Таким образом, для 32-разрядной ОС вы получаете 1,3 ГБ, а для 64-разрядной ОС предел слишком велик, чтобы поражать сегодняшние приложения.

+0

Разве это не 2GB вместо 1.3GB? – Kumar

+0

Нет. Приложения .NET отличаются от обычных приложений. –

0

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

Проблемы с номером сборки чаще возникают из-за слишком большого количества грануляции в самом проекте. Я видел монолитное приложение, которое состоит из 100 проектов Visual Studio, потому что архитектор сказал: «Нам нужна низкая связь». Попытайтесь придерживаться правила Роя Ошерова: каждая сборка должна иметь физический (не логическая) причина существования. Логические проблемы лучше решают пространства имен, а не сборки.

Надеюсь, что это поможет.

+0

Нет никакого сравнения с плагинами # FireFox, но у нас уже есть почти 3 дюжины доступных и подсчета. .. – Kumar

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