我有一个用户控件,通常有2000个左右的组件控件(TextBoxes,TextBlocks,ComboBoxes等),我的应用程序运行速度不如我想的那么快。
虽然2000控件起初可能看起来很多,但它实际上只代表具有10列和200行的WPF数据网格 - 这是许多应用程序中的常见场景。
这是一个非常简单的示例,我认为它模仿了这样的数据网格,而且我看到了大约200ms的渲染时间:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Stopwatch stopwatch = Stopwatch.StartNew();
ScrollViewer scrollViewer = new ScrollViewer();
StackPanel stackPanel = new StackPanel();
for (int rowIndex = 0; rowIndex < 200; rowIndex++)
for (int columnIndex = 0; columnIndex < 10; columnIndex++)
stackPanel.Children.Add(new TextBlock { Text = Guid.NewGuid().ToString() });
scrollViewer.Content = stackPanel;
this.Content = scrollViewer;
UpdateLayout(); // Force a UI layout so we can get an accurate stopwatch reading
MessageBox.Show(stopwatch.Elapsed.ToString(), "UI Layout Time");
}
这就像我想到的那样简单,但是200毫秒仍然足以让用户注意到并且可能认为软件很慢。
如果这是一个真正的数据网格控件,那么控件很可能比TextBlocks更复杂,并且可能会有更多的时间,比如IValueConverters和Styles / DataTemplates。
我有什么办法可以加快拥有大量数据的控件的加载时间吗?