Это не связано с importlib; если вы импортируете модуль явно, как from plugins.plugin1 import b
, вы увидите ту же проблему. Это потому, что a
не является модулем, фактическое имя модуля - plugins.plugin1.a
.
Вы должны использовать относительный импорт в плагине. Измените import a
на from . import a
Использование памяти: INotifyPropertyChanged является интерфейсом, таким образом, близко к нулевой памяти наверху. "Близко к нулю", потому что я предполагаю, что Вы будете писать метод OnPropertyChanged и возможно некоторые обработчики событий в других классах (если Вы не будете действительно просто говорить о привязке к WPF), таким образом, будет небольшой код наверху.
Производительность: DependancyProperties имеют большое продолжение под покрытиями. Если Вы не пишете самый непроизводительный метод OnPropertyChanged никогда, я держал бы пари, что INotifyPropertyChanged будет победителем перфекта также.
, Если у Вас нет определенной причины желания/необходимости поведений, обеспеченных DP, я просто пошел бы с INotifyPropertyChanged.
Обновление
Как комментарий упоминает, что обязательная производительность немного быстрее для РАЗНОСТЕЙ ПОТЕНЦИАЛОВ (на 15-20% быстрее, но все еще только различие меньше чем 50 мс для 1 000 связывает), должный на сумму отражения, необходимого к к поиску/сцеплению прямых свойств. Это технически отличается, чем выполнение обновления связанного с данными элемента UI, который является тем, к чему был приспособлен мой комментарий. Но это не означает, что мое пари все еще корректно также. Так несколько примеров и много землеройной машины Отражателя.NET позже это выглядит... неокончательным. Оба пути делают тонну работы под покрытиями, и я не смог заставить любые примеры показывать категорическую разницу в производительности обновления.
я все еще придерживаюсь INotifyPropertyChanged, если у меня нет определенной потребности в РАЗНОСТЯХ ПОТЕНЦИАЛОВ, но это было, по крайней мере, интересное осуществление для ввода по абсолютному адресу вокруг в ядро WPF еще немного. :)
Неважно я просто нашел ответы, которые я искал в следующем вопрос .
я повторно отправлю ответ "LBugnion" (таким образом, весь кредит перейдет к нему) для Вашего удобства:
<час>Реализация INotifyPropertyChanged имеет много преимуществ перед DependencyObjects (я сокращу, это ДЕЛАЕТ для помощи), и использование DependencyProperties (РАЗНОСТИ ПОТЕНЦИАЛОВ):
, С другой стороны, наследовать DOS в WPF имеет следующие преимущества:
существуют другие соображения, но это основное.
я думаю, что общее согласие состоит в том, что РАЗНОСТИ ПОТЕНЦИАЛОВ являются большими для средств управления (и можно реализовать CustomControl с пользовательскими РАЗНОСТЯМИ ПОТЕНЦИАЛОВ даже в Silverlight), но для объектов данных необходимо скорее реализовать INotifyPropertyChanged.
HTH, Laurent
По моему скромному мнению, INotifyPropertyChanged очень легок и прост в использовании по сравнению с РАЗНОСТЯМИ ПОТЕНЦИАЛОВ. Что касается производительности/памяти, сделайте Вас действительно потребность знать? Knuth хочет знать.
, Очевидно, необходимо определить требования и видеть, сколько DP Вы ожидаете создавать/вторыми, сколько времени жил, они и запускают несколько тестов. Я сделал это прежде и не видел проблем с созданием недолгого DP в ~10k/sec (YMMV).
Как MSDN заявляет, WPF более быстр при привязке к DependencyProperties, чем к пользовательскому использованию объектов CLR INotifyPropertyChanged.