Проблема с производительностью WPF - PullRequest
0 голосов
/ 02 апреля 2010

У меня есть форма, которая имеет много вкладок. Каждая вкладка имеет много элементов управления текстовыми полями, комбинированными списками, сетками данных и т. Д. Т. Я привязываю форму к одному источнику данных таким образом

this.DataContext=MyClassInstance

Но при этом моя форма открывается очень медленно. около минуты.

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

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 02 апреля 2010

Я согласен с Джерри.

Я предлагаю следующее: Когда вы запускаете приложение, вы автоматически открываете одну вкладку, я думаю. Загрузите только эту вкладку, не заботьтесь о других. Это должно начать ваш проект намного быстрее. Что вы делаете для других вкладок, так это загружаете их при первом нажатии. Когда пользователь заинтересован, например, вкладкой 5, единственной загрузкой будет начальная вкладка при запуске и вкладка 5 при нажатии пользователем. все остальные вкладки не будут загружены, что уменьшит время запуска.

Надеюсь, идея вам понятна и поможет вашему приложению.

0 голосов
/ 05 апреля 2010

Я обнаружил, почему моя форма открывается так медленно. Я использую около 20 объектов XMLDataProvider в форме. и эти провайдеры были перебраны с помощью XML-файла. Когда я комментирую код ниже, все работает быстро. Спасибо всем за помощь

                //relatives_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_RelativeList" };
            //education_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_EducationList" };
            //requalification_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_RequalificationList" };
            //jobHistory_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_JobHistoryList" };
            //rank_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_RankList" };
            //tradeUnion_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_TradeUnionList" };
            //election_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_ElectionList" };
            //judgeHistory_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_JudgeHistoryList" };
            //tempWork_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_TempWorkList" };
            //inquire_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_InquireList" };
            //bulleten_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_BulletenList" };
            //reprimand_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_ReprimandList" };
            //certificate_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_CertificateList" };
            //course_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_CourceList" };
            //incentive_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_IncentiveList" };
            //btrip_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_BtripList" };
            //vacation_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_VacationList" };
            //pass_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_PassList" };
            //language_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_LanguageList" };
0 голосов
/ 02 апреля 2010

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

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

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

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