AI를 활용한 재밌는 것들을 개발합니다

2021년 9월 23일 목요일

[C#] DataGridView 에 Double Buffered 로 화면 리프레시 속도 개선 시키기

 방구석지니의 계좌현황을 DataGridView에 표시하고 있다. 60종목이 되다 보니 화면 전환 할 때마다 60종목이 다시 DataGridView에 그려지는 것이 항상 눈에 거슬려 왔다. 


Double Buffering 이라는 기법이 있는데 위와 같이 표를 하나씩 그리지 말고 메모리에 다 그린 다음에 한번에 표시함으로써 화면의 버벅임을 방지하는 기술이다. 옛날 OpenGL로 도면 그리는 프로그램 만들때 사용해 봤었는데 DataGridView에도 적용이 되는 것을 이번에 구글링 하면서 알았다.


https://424485.tistory.com/27

위 블로그에 원본 코드가 있는데 방구석지니에 적용하니 OpenAPI 쪽에서 에러가 나서 바로 사용할 수 없어 아래와 같이 코드를 수정해서 적용하였다.


void dgv_doubleburfferdON(DataGridView dgv)
{
      Type dgvType = dgv.GetType();
      PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",      
                        BindingFlags.Instance | BindingFlags.NonPublic);
      pi.SetValue(dgv, true, null);
}

dgv_doubleburfferdON(dgv_profit);
dgv_doubleburfferdON(dgv_주문LIST);
dgv_doubleburfferdON(dgv_주문매수LIST);


위와 같이 함수를 하나 만들고, 적용하려는 DataGrideView 컨트롤을 지정해주면 된다.



DataGridView는 Double Buffering이 적용되서 속도가 빠르게 개선되었으나 다른 UI 컨트롤들은 여전히 순자척으로 그려지는게 보인다. 이것도 개선하고 싶으나... 다음 기회에...


댓글 없음:

댓글 쓰기

가장 많이 본 글