많은 데이터를 하나씩 불러올때 어떻게 하나요?

안녕하세요. 저는 주기율표를 만들고 있는데 대량의 데이터를 함수화하면 코드도 너무 길어지고 프로그램도 과부화가 걸리는 것 같습니다… 어떻게 하면 코드도 효율적이고 프로그램도 잘 돌아갈 수 있나요??

좋아요 2

그래서 실무에서 주로 쓰는 방식이 비동기 & Paging & Queuing 입니다. 검색 한 번 해보시는 걸 추천합니다.

좋아요 1

주기율표… 에 그럴만한 대량의 데이터가 있었나요…? 제가 상상하는 주기율표가 아닌가…

좋아요 1

118개의 원소를 주기율표대로 나열한뒤에 하나씩 버튼을 누르면 그 원소에 대한 정보를 보여주려고 합니다… 그러면 원소이름, 원자량, 밀도 등등 프린트할 데이터가 너무 많아요

좋아요 1

혹시 도움될만한 자료같은 것이 있을까요??

좋아요 1

@gloomn 다른 이야기이지만 WPF로 된 원소주기율표 프로그램도 한번 참고하시면 좋을 것 같습니다! :grinning:

좋아요 1

질문하신 내용만으로는 좋은 답변이 나오기 힘들어보입니다.

먼저 데이터의 양을 줄이는법은 단순하게 압축된 상태를 제공하거나, 그에 상응하는 포멧을 사용하면 양을 줄일 수 있습니다. c#은 MessagePack이 있고, protobuf 나 parquet 등을 통해 줄일 수 있습니다.

데이터가 일정수준 이하로 줄지 않기 때문에 할 수 있는것은 데이터의 크기가 아니라 데이터가 필요한 시간으로 분리합니다. 10만개의 데이터가 있다고 해도 한번에 10만개를 볼 수는 없겠죠?

그래서 한번에 볼 수 있는 양을 제한하고 이를 페이지상태로 구분하는게 paging입니다.
예를들어 10만개 중에 10개만 보여주고 이것을 10000페이지로 분리하여 조회하는것이죠.
이렇게하면 한 페이지당 조회할 수 있는 수가 10만개에서 10개로 줄기 때문에 필요한 순간적인 데이터 줄어듭니다.

또 다른 방법으로는 infinite scroll 입니다. 페이징과 비슷하지만 페이징은 데이터의 절대적인 수를 기반하여 조회한다면, 무한스크롤은 마지막 읽은 시점을 cursor로서 추가적인 조회를 의미합니다. 그래서 처음 조회한 이후에 다음, 다음,다음 값들을 읽으면서 계속해서 순차적으로 읽어내려가는것이죠.

특히나 무한스크롤은 서버-클라이언트간 통신뿐만 아니라 게임처럼 다이나믹한 데이터 생성-조회-삭제가 빈번한 경우에도 매우 좋은 효율을 보여주기 때문에 보통 잘 적용하면 어디든 쓸 수 있습니다.

만약 데이터는 준비되었는데 화면에 그리는것이 부담된다면 역시 화면 스크롤 위치에 따라 일정범위 이상의 UI 컨트롤들을 disable 시키는 식으로 메모리 최적화등을 진행할 수 있습니다.

가장 중요한것은 현재 프로그램의 상태와 목표점이 일치하는가 입니다.

위와 같은 기법들은 원하는 상황, 제한된 리소스는 무엇인지, 필요한 타이밍등을 명확히 파악하고 진행하여야 합니다. 정확한 목표없이 진행하는 최적화는 한번에 전부 읽는것보다 못한 상황을 가져올 수 있음을 주의하셔야 합니다.

근데 또 한번에 읽는것만큼 편하고 빠른게 없을때도 많아요.

좋아요 3

간단한 인메모리에서 처리는 IEnumerable등을 활용하여 Lazy 하게 호출하는것으로도 최적화가 가능합니다.

좋아요 2

오! 감사합니다!! 원래 winform으로 만드려고 했는데 기존에 만든 winform 프로젝트는 그냥 프로토타입으로 생각하고 WPF로 만드려고 했거든요

좋아요 1