私の入力情報のグリッドビューの種類を表示するために使用する次のWPF C#
コードが非常に遅く、特にそれをどのように順番に改善するのかを理解しようとしています。コントロールのレンダリングを高速化します。次のWPF UIコードを高速化するには
I以下の入力、すなわち、ユーザの選択に応じて変化することができる持っている:
public class Field
{
public string Key;
public Tuple<string, bool> Value;
}
var fields = new List<Field>();
// fill fields...
各フィールドのために私はVirtualizingStackPanel
に挿入されたコントロール作成:
StackPanelFields.Children.Clear();
foreach (var f in fields)
StackPanelFields.Children.Add(GetFieldControl(f.Key, f.Value));
private Grid GetFieldControl(string name, Tuple<string, bool> value)
{
Debug.Assert(!String.IsNullOrWhiteSpace(name));
Debug.Assert(value != null);
// two-column grid
var grid = new Grid();
grid.ColumnDefinitions.Add(new ColumnDefinition());
grid.ColumnDefinitions.Add(new ColumnDefinition());
var color = value.Item2 ? Brushes.Black : Brushes.Red;
var nameTextblock = new TextBlock { Text = name, Margin = new Thickness(5, 0, 0, 5), Foreground = color };
grid.Children.Add(nameTextblock);
// value
var valueTextBox = new TextBox
{
Text = value.Item1,
Foreground = color,
TextWrapping = TextWrapping.Wrap,
IsReadOnly = true,
BorderThickness = new Thickness(0)
};
Grid.SetColumn(valueTextBox, 1);
grid.Children.Add(valueTextBox);
return grid;
}
数フィールドの平均は1000-2000です。私のマシンでは、VirtualizingStackPanel
は1秒以上必要です。私はこの時間を測定していませんが、それはユーザーにとって非常に遅いことは明らかです。
[仮想化](httpsでテンプレートを使用してみてくださいです:// msdn.micros oft.com/en-us/library/system.windows.controls.virtualizingstackpanel(v=vs.110).aspx) –
オプションのページングのようなものですか? –
@JeroenvanLangen各フィールドのリストのStackPanelをセカンダリストレージに保存することについて話していますか?このリストの数(可能なユーザーの選択肢)は10kまで増やすことができます。 – Nick