Улучшение производительности медленной горизонтальной прокрутки списка в C# Winforms.C#

Место общения программистов C#
Anonymous
Улучшение производительности медленной горизонтальной прокрутки списка в C# Winforms.

Сообщение Anonymous »

Я написал приложение для сбора данных о книгах и помещения их в список в .NET 8 с использованием C# и Winforms (снимок экрана ниже). В начале моего списка есть около 19 столбцов, но при работе с данными их число увеличится примерно до 50–70. Некоторые столбцы окрашены в цвет.
Теперь я испытываю низкую производительность элемента управления списком, когда будет размещено больше данных (например, около 100 записей списка). Проблема приводит к мерцанию при прокрутке. Хотя я мог бы решить проблему вертикального мерцания, добавив код для активации двойной буферизации (я не знаю, нужен ли он для использования, но я показываю код ниже), мерцание при горизонтальной прокрутке остается. И дело не только в мерцании. Перемещение ползунка кажется медленным, так как столбцы и его записи перерисовываются при перемещении ползунка.
Это не видно при наличии 1–5 записей в списке, но начинается примерно с 10–15 и становится хуже по мере перемещения. больше записей, которые я добавил в список. Я читал, что представление списка Winforms перерисовывает все свое содержимое даже при небольших изменениях.
Горизонтальная полоса прокрутки активируется автоматически, но я не могу получить к ней доступ. Кто-нибудь знает, что я могу сделать, чтобы хотя бы уменьшить медленное движение? Было бы уже что-то, если бы я мог получить доступ к горизонтальной полосе прокрутки элемента управления списком.

Код: Выделить всё

public static class ControlExtensions
{
public static void SetDoubleBuffered(this System.Windows.Forms.ListView listView, bool doubleBuffered = true)
{
listView.GetType()
.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)!
.SetValue(listView, doubleBuffered, null);
}
}
Изображение


Подробнее здесь: https://stackoverflow.com/questions/787 ... p-winforms

Вернуться в «C#»