Композитный блок приложения Область впрыска медленно - PullRequest
0 голосов
/ 29 июля 2009

Я создаю приложение wpf с составным блоком приложения ("призма") V2, и у меня возникла проблема, когда пользовательский элемент управления, который вводится модулем, очень медленно рендерится. Пользовательский элемент управления содержит сетку данных, содержащую около 2000 строк, и при отображении элемента управления на экран наблюдается значительная задержка. Изначально я думал, что медлительность связана с самим элементом управления сеткой данных wpf toolkit, но это не так. Когда я перемещаю элемент управления, содержащий сетку данных (TestControl), из внешнего модуля в проект оболочки и загружаю его прямо оттуда, элемент управления визуализируется немедленно без каких-либо проблем.

Я использую следующий код в реализации IModule в моем модуле, чтобы внедрить пользовательский элемент управления wpf в оболочку

 this.regionManager.RegisterViewWithRegion("mainRegion", typeof(TestControl));

Есть ли проблемы с производительностью при загрузке элементов управления из других модулей в приложении призмы? Какой самый оптимальный способ их загрузки?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 августа 2009

проблема здесь заключалась в том, что wpf медленно обновлялся при обновлении пользовательского интерфейса vai диспетчер из фонового потока.Я взялся за разговор по codeplex и получил его более или менее отсортированным.

http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=64113

1 голос
/ 29 июля 2009

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

Во многих примерах вы делаете что-то вроде "Shell.Show ();" в вашем методе CreateShell вашего загрузчика, но вы можете рассмотреть возможность перемещения ссылок на оболочку на закрытый член вашего класса начальной загрузки и вызова .Show () для него, например, так:

public class Bootstrapper : UnityBootstrapper
{
    Shell shell;
    protected override DependencyObject CreateShell()
    {
        shell = Container.Resolve<Shell>();
        return shell;
    }

    protected override void InitializeModules()
    {
        base.InitializeModules();
        shell.Show();

    }

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

Если ваши модули загружаются очень долго, вы также можете захотеть показать заставку между CreateShell и после InitializeModules.

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