제 경우에는 2D ArrayList에 가로선, 세로선 및 채워진 사각형을 그릴 때 사용되는 데이터가있는 객체로 가득차 있습니다. 다른 경우 개체의 양이 다르며 이미지의 선과 직사각형의 양이 다릅니다. 그러나 때때로 이미지를 다시 그려야합니다. 다시 그리는 것이 더 많을수록 화면의 깜박임이 강해집니다 ("깜박임"으로 무엇을 의미하는지 파악할 수 있기를 바랍니다).C#, WinForms 그리기 데이터가 ArrayList에 저장됩니다. 좋은 생각입니까?
나는 이중 버퍼링을 이미 시도해 왔지만, 내가 제대로하고 있다고 생각하지 않는다. 깜박임의 유형 만 변경된다 ... 그러나 그것은 현재의 경우가 아니다.
어디에서나 ArrayList의 요소를 추가하고 제거하는 것은 쉽지만 그 접근은 어렵다는 것을 읽었습니다. List가 더 잘 수행된다는 사실을 읽었습니다. ArrayList는 컴퓨터에서 리소스를 덜 필요로한다는 것을 의미합니다.하지만 끝에서 요소를 추가하고 제거하는 것은 쉽습니다. 그러나 Array의 성능이 가장 빠른지 확실하지 않습니다. 그리고 이것은 Array 나 List로 ArrayList를 변경하면 플래시가 약해질 수 있다고 생각하게 만듭니다.
ArrayList에 저장하는 모든 요소가 같은 클래스의 양식이므로 문제가되지 않습니다.
제 질문은 : ArrayList를 Array 또는 List로 대체하면 깜박임을 약화시킬 수 있습니까?
경우에 따라 물체의 양은 2x2 또는 4x3이지만 10x10 이상입니다. (NxM에서는 M 요소가있는 N 개의 배열을 의미합니다.) 그리고 사각형에는 그리기에 더 많은 시간이 필요합니다. "깜박임을 약화"한다는 것은 "깜박임을 멈추는 것"을 의미하지는 않았지만 나는 그림을 더 빠르게 만드는 방법을 의미했습니다. 그리고 네, 문제를 해결하기 위해 이중 버퍼링을해야한다는 것을 알고 있습니다. 그러나 드로잉을 더 빠르게 만들면 (더블 버퍼링이 더 빨라질 것입니다.), 앱도 더 빨라질 것입니다. 그리고 그것은 "할 일"목록에 속하는 것 중 하나입니다. – AlexSavAlexandrov
필자는 항상 최적화 된 코드를 작성하는 것을 지원했지만, 성능 변화는 눈에 띄게 또는 아닙니다. 하지만 귀하의 경우 1000x1000 반복으로 약 10-50 밀리 초가 소요됩니다. 10-50 밀리 초와 비교하여 1000000 개의 직사각형을 그리는 데 얼마나 오래 걸릴지 생각하십시오. (여기를보십시오 : http://www.dotnetperls.com/unboxing). int 유형에 대한 이러한 결과는 다른 유형의 경우 최대 5 배 가량 소요될 수 있으며 반복 횟수를 100 배 줄였다 고 가정했습니다. 그래서, 우리 모두는 1000000 개의 직사각형 그리기와 유사한 객체가 많은 시간을 소비한다는 것을 알고 있습니다. IMHO, 성능 향상은 % 0.1보다 크게 높지는 않습니다. –