WPF VirtualizingStackPanel для увеличенной производительности

Я запустил бы путем записи интерфейса и класса обертки, который будет инкапсулировать эту логику и затем использовать интерфейс в моем контроллере:

public interface IAuth 
{
    void DoAuth(string userName, bool remember);
}

public class FormsAuthWrapper : IAuth 
{
    public void DoAuth(string userName, bool remember) 
    {
        FormsAuthentication.SetAuthCookie(userName, remember);
    }
}

public class MyController : Controller 
{
    private readonly IAuth _auth;

    public MyController(IAuth auth) 
    {
        _auth = auth;
    }

}

Теперь IAuth мог легко дразниться в модульном тесте и проверить, что контроллер называет ожидаемые методы на нем. Я НЕ был бы модульный тест FormsAuthWrapper класс, потому что это просто делегирует вызов к FormsAuthentication, который делает то, что это, как предполагается, делает (гарантия Microsoft:-)).

34
задан Adi Lester 26 July 2012 в 11:55
поделиться

2 ответа

There are two techniques that might be a big help. Both of them are described very well by Bea Stolnitz on her blog.

The first is UI Virtualization и второй - Виртуализация данных

В виртуализации пользовательского интерфейса вы используете такие вещи, как VirtualizingStackPanel, чтобы заставить пользовательский интерфейс рисовать меньше вещей.

Виртуализация данных гарантирует, что вы не занесете миллион объектов в память, когда вы только собираетесь чтобы показать 100.

Таким образом, виртуализация пользовательского интерфейса сводит к минимуму количество отрисовываемых элементов, а виртуализация данных сводит к минимуму количество отрисовываемых элементов.

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

51
ответ дан 27 November 2019 в 16:47
поделиться

У меня была точно такая же проблема в WPF с использованием TabControl и DataGrid. При увеличении размера элемента DataGrid переключение вкладок становится ОЧЕНЬ медленным! После этого я нашел этот пост в блоге Беа Стольниц, как предполагалось в предыдущем ответе. Это дало мне подсказку Google "wpf tabcontrol VirtualizingStackPanel" который дает мне ссылку на DrWPF: http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

Он точно описывает проблему и дает решение: -))

.... Перфоманс происходит во время построения дерева. К сожалению, если
вы используете типичный подход MVVM с привязкой к ItemsSource
свойство TabControl, все дерево необходимо каждый раз перестраивать
выбран элемент вкладки. Обычно это очень дорогая операция. ....

9
ответ дан 27 November 2019 в 16:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: