Об этом являющийся более быстрой/лучше памятью:
я изучил эту проблему с Java, я предполагаю, что.NET была бы так же умна об этом.
реализация для Строки является довольно впечатляющей.
Строковый объект отслеживает "длину" и "совместно использованный" (независимый от длины массива, который содержит строку)
, Таким образом, что-то как
String a = "abc" + "def" + "ghi";
может быть реализовано (компилятором/временем выполнения) как:
- Extend the array holding "abc" by 6 additional spaces. - Copy def in right after abc - copy ghi in after def. - give a pointer to the "abc" string to a - leave abc's length at 3, set a's length to 9 - set the shared flag in both.
, Так как большинство строк является недолгим, это делает для некоторого ОЧЕНЬ эффективного кода во многих случаях. Случай, где это абсолютно НЕ эффективно, - когда Вы добавляете к строке в цикле, или когда Ваш код похож на это:
a = "abc";
a = a + "def";
a += "ghi";
В этом случае, Вы - очень более обеспеченное использование конструкции StringBuilder.
Моя точка - то, что необходимо быть осторожными каждый раз, когда Вы оптимизируете, если Вы не АБСОЛЮТНО уверены, что знаете то, что Вы делаете, И Вы абсолютно уверены, что это необходимо, И Вы тестируете, чтобы гарантировать, что оптимизированный код делает передачу варианта использования, просто кодируйте его самым читаемым возможным способом и не пытайтесь - думают компилятор.
я потратил впустую 3 дня, смешивая со строками, кэшируя/снова используя строковых разработчиков и скорость тестирования, прежде чем я посмотрел на строковый исходный код и выяснил, что компилятор уже делал его лучше, чем, я возможно мог для своего варианта использования. Затем я должен был объяснить, как я ДЕЙСТВИТЕЛЬНО не знал то, что я делал, я только думал, что сделал...
К вашему сведению, сегодня утром я наткнулся на интересное сравнение всех контейнеров .NET IoC здесь:
http://elegantcode.com/2009/01/07/ioc-libraries -compared /
Несколько вопросов:
От себя лично:
Я использовал StructureMap по тем же причинам, которые упоминались в блоге, на который я ссылался. Я думаю, что XML-конфигурация - это огромная проблема для поддержки и, особенно, отладки (см. WCF). Я еще не пробовал Ninject, но, судя по их маркетингу,
Думаю, выбор сводится к поиску фреймворка, отвечающего вашим требованиям, а затем и личным предпочтениям.
Использует ли ваш проект уже такую библиотеку, как rhino-tools, которая уже интегрируется с DI фреймворк? Если это так, это может быть хорошей отправной точкой, если вы хотите избежать использования «множества различных фреймворков внедрения зависимостей».
Посмотрите эти два сообщения:
Spring и Unity тяжеловесны с XML.
Я бы не согласился с этим утверждением для Unity; вы можете написать
container.RegisterType<IRobot, MrRoboto>();
и выполнить настройку в коде, используя свободный интерфейс. Лично мне нравится Unity.
Трудно ответить, какой фреймворк "лучший", но я могу сказать, какой фреймворк самый простой: Простой инжектор:
Простой инжектор - это простая в использовании библиотека Inversion of Control for NET и Silverlight. Он поддерживает только конфигурацию на основе кода и является идеальной отправной точкой для разработчиков, незнакомых с большим IoC / Библиотеки DI
http://simpleinjector.codeplex.com/
Бесстыдный плагин btw ;-)