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