Когда я работаю с большим набором данных и множеством столбцов в WPF DataGrid, прокрутка обычно приемлема. Но как только Accessibility.dll загружается, производительность падает, и при использовании DataGrid он становится очень медленным и прерывистым.
Это происходит, когда где-то в приложении отображается всплывающая подсказка. Но это также может быть ComboBox , ContextMenu или какой-либо другой элемент управления.
В тот момент, когда отображается первая всплывающая подсказка, я вижу в окне вывода, что dll загружается:
DataGridScrollPerformance.exe (CLR v4.0.30319: DataGridScrollPerformance.exe): загружено C:\windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility .dll'.
Это приложение WPF, использующее .NET Framework 4.8.
Я нашел похожий вопрос , но без ответа:
https://stackoverflow.com/questions/603 ... nt-of-data
Чтобы воспроизвести проблему, я создал минимальное приложение WPF с приведенными ниже классами.
При сравнении прокрутки сверху вниз до загрузки Accessibility.dll и после нее при загрузке есть заметная разница.
Я сделал 3 разных элемента управления, чтобы принудительно загрузить Accessibility.dll. Подсказка, поле со списком и контекстное меню.
Model.cs
using System;
namespace DataGridScrollPerformance
{
public class Model
{
public string Id { get; set; }
public string Guid { get; set; }
public DateTime DateForId { get; set; }
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
public int Property4 { get; set; }
public int Property5 { get; set; }
public int Property6 { get; set; }
}
}
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
namespace DataGridScrollPerformance
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataGrid.ItemsSource = GetDemoData();
}
private List GetDemoData()
{
var demoData = new List();
var random = new Random();
for (var i = 0; i < 1000; i++)
{
demoData.Add(new Model
{
Id = i.ToString(),
Guid = Guid.NewGuid().ToString(),
DateForId = new DateTime(1900, 1, 1).AddDays(i),
Property1 = random.Next(0, 1000),
Property2 = random.Next(0, 1000),
Property3 = random.Next(0, 1000),
Property4 = random.Next(0, 1000),
Property5 = random.Next(0, 1000),
Property6 = random.Next(0, 1000),
});
}
return demoData;
}
}
}
MainWindow.xaml
Подробнее здесь: https://stackoverflow.com/questions/781 ... ets-loaded
WPF: производительность DataGrid падает после загрузки Accessibility.dll ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение