2009-08-11 4 views
3

DataGridView에 대한 업데이트를 수행하는 대부분의 CPU 시간을 사용하는 C#/.Net 응용 프로그램이 있습니다. 나는 매 1.5 초마다 수동으로 데이터를 업데이트하고 변경된 데이터 만 업데이트한다. 1.5 초마다 약 250 건의 업데이트가 발생합니다. 1.5 초를 훨씬 더 작은 수 (0.5 초 정도)로 줄이고 싶습니다. 가능한 한 많은 프로파일을 작성하고 최적화했으며, 성능이 좋았지 만 더 빨리 진행하고 싶습니다.DataGridView 성능 - 비디오 카드에 따라 다릅니 까?

제 질문은, NVIDIA FX1800에서 NVIDIA FX3800으로 비디오 카드를 업그레이드하면 상당한 속도가 향상됩니까?

답변

1

GDI + 연산은 모든 그래픽 카드가 지원하는 기본 가속 연산 (선, 사각형 등) 만 사용하기 때문에 그래픽 CPU에 크게 의존하지 않습니다.

내가 여기있는 문제는 업데이트 중에 제어 기능을 "숨기는"것이 아니라는 것입니다. 사용 가능한 경우 BeginUpdate/EndUpdate 메소드를 확인하십시오. 그렇지 않은 경우, 가시로 설정을 false로 설정하고 가시성을 true로 설정하면 가끔 문제를 해결할 수 있습니다.

1

시간을 낭비하는 것은 화면을 그리는 데 거의 사용되지 않지만 데이터의 내부 표현을 업데이트 할 때 거의 도움이되지 않습니다.

편집 :

의 시간이 소요되는 위치, 찾아 프로파일 러를 조사합니다. 나는 개인적으로 그 중 하나를 선호한다. Red Gate

1

나의 창자는 "No"

CPU 시간이 GPU 시간이 아닙니다. CPU가보기를 업데이트하는 중이면 시스템을 CPU 친숙한보기로 변경해야 할 수 있습니다. 게으른로드가 아니며 모든 데이터와 모든 업데이트를 얻는 것처럼 들립니다. 당신의 가치 범위는 얼마나 큰가요? 많은 가치가 없다면 괜찮을 것입니다. 내 생각에 당신은 많은 가치를 지니고 전체 목록을 메모리에 유지하고있다. 이것은 몇 가지 이유로 나쁜 것입니다. 많은 메모리가 필요하므로 모든 변경 사항 (현재 디스플레이에 영향을주는 변경 사항 만이 아니라)에주의를 기울여야합니다. 변경하고 업데이트 할 내용이 많습니다.

데이터의 일부만로드하는 좀 더 친숙한 컨트롤을 찾습니다.

가지고있는 그래픽 카드는보기를 매우 짧은 시간 내에 렌더링 할 수 있어야합니다. 응용 프로그램을 잡아 당겨 화면 주위를 격렬히 움직여보십시오. 이렇게하면 얼마나 빨리 업데이트 할 수 있는지 알 수 있습니다 (예 : 캐시 된 것이므로 완전히 정확하지는 않음).

목록의 크기는 어느 정도입니까?

야곱

+1

실제로 변경된 셀에 대해서만 PropertyChanged 이벤트를 호출합니다. 이것이 "게으른로드"에 의한 것이라고 생각하거나 추측합니다. DataGridView에는 약 30 개의 열과 약 30 개의 열만 있으므로 매우 많은 양의 데이터가 표시되지 않습니다. 문제는 초당 업데이트 수와 관련이있는 것 같습니다. –

+0

확인. 그것은 조금 바뀐다. 내가 업데이 트에 모든 것을 교환에 균열 걸릴 것입니다. 900 세포 중 150 세포의 변화가 꽤 높습니다. 업데이트를 중지하고 모든 변경 사항을 업데이트 한 다음 업데이트를 시작하지 않는 한 (아마 더 빠름). 900 세포가 즉시 있어야합니다. 스크롤 위치를 기록하고 UI를 새로 고친 다음 스크롤 위치를 복원합니다. 다행히도 이것은 매끄럽게 진행될 것입니다. 그래도 작동하지 않으면 다른 컨트롤을 찾아야합니다. 이것은 적은 양의 데이터입니다. 게으른 로딩은 수천 개의 레코드 중 10 개를 생각하고 컨트롤에 100 개 정도만 넣는 것입니다. – TheJacobTaylor

+0

죄송합니다. 당신이 무엇인지 확신하지 못합니다. TheJacobTaylor - 위의 의견을 말씀드립니다. "업데이트에서 모든 것을 교환하는 것"은 무엇을 의미합니까? 현재 Tick 이벤트 핸들러가 변경된 모든 셀에 대해 PropertyChanged 이벤트를 발생시키는 Timer가 있습니다. 이 타이머의 간격은 1.5 초입니다. 또한 "UI 새로 고침"이라고 할 때 DataGridView.Refresh()를 호출한다는 의미입니까? –

0

나는 거의 성능 저하와 50ms마다 새로 고쳐되는 데이터는 (그리고, 나는 전체 목록을 의미) 응용 프로그램에서 1,000 항목의 목록을 제시하는 DataGridView을 사용했다. 그래서 나는 당신이하고 싶은 것이 DataGridView에 너무 많이 있다고 생각하지 않습니다.
Eric J.이 제안한 것처럼 코드를 프로파일 링해야합니다. 성능 문제가 코드의 다른 부분에서 비롯된 것입니다.

+0

가상 모드를 사용 중입니까? –

관련 문제