To jest naprawdę proste..Net TableLayoutPanel - Kontrola usuwania jest bardzo powolna
Mam TableLayoutPanel, który jest wypełniony formantów (tylko etykiety, przyciski i niektóre panele z przyciskami) na podstawie kwerendy bazy danych. Gdy dane wymagają odświeżenia, używam TableLayoutPanel.Controls.Clear(). Niestety, jest to bardzo powolna operacja. Spodziewam się, że będzie on szybszy niż kod wypełniający tabelę, ale jest co najmniej 3 lub 4 razy wolniejszy.
Zdecydowanie udowodniłem, że powolność jest wykonywana podczas wykonywania Controls.Clear(), wykonując to jako pojedynczą czynność wykonaną w TableLayoutPanel po wyświetleniu okna komunikatu (procedura powraca). Kontrolki wyraźnie znikają z dołu do góry. Kiedy zestaw rekordów jest używany do ponownego zaludnienia TableLayoutPanel, szybkość elementów sterujących pojawiających się od góry do dołu jest prawie szybsza niż widzę.
Już robię TableLayoutPanel.SuspendLayout() i ResumeLayout().
W formularzu nie wydaje się, aby cokolwiek zrobić.
Mogę po prostu usunąć całą kontrolę i odtworzyć ją za pomocą kodu, ale to jest wielki ból i sprawia, że niezły projekt GUI jest bezcelowy. Musiałbym zagłębić się w każdą nieruchomość, którą ustawiłem na kontrolerze i stworzyć dla niej kod (choć wydaje mi się, że mógłbym to wydostać z samego kodu projektanta, nadal jest źle).
Jakieś pomysły na to, jak wykonać zadanie szybciej? Jestem nawet otwarty na używanie innych metod poza TableLayoutPanel ... Po prostu potrzebuję wolności do umieszczenia wielu przycisków na komórkę lub zakazu, aby móc rozciągnąć kolumny w nagłówku tabeli.
Czy C# może przynajmniej zamrozić cały formularz, gdy odrysowuje, a następnie maluje wszystkie naraz?
Wspominasz TableLayoutPanel i FlowLayoutPanel. –
Czy uruchomiłeś profiler, aby udowodnić, że jest to dokładnie jedna linia kodu? Czy możliwe jest wywołanie skutków ubocznych w tym wierszu kodu? Zdarzenia, które są wywoływane, aby sterowanie stało się niewidoczne lub podobne? – WillfulWizard
@Willfulwizard Zaktualizowałem swój post z powodu, dla którego uważam, że to Controls.Clear() zajmuje dużo czasu. – ErikE