Q&A

  • 델파이말고 씨샵 질문인데요. 제가 그동안 델파이만 써봐서..
안녕하세요.

델파이 개발자 분들중 시대 흐름에 따라 씨샵쪽도 같이 하시는 분들이 계실것이라

믿고 도움좀 청합니다.

현재, 델파이만 몇년 쓰다가 씨샵으로 바꾼다고 해서 바꿔서 책한권 못읽고 바로 바로 코딩만 하고 있습니다.

그러다가 DB 관련하여 데이타건수가 엄청 많아서

이것을 읽어오는데 UI가 멈춰 있는 현상이 발생합니다.

즉 쿼리를 던지면, 응답오는 시간에만(첫 페치) 대략 5-10초? 정도가 걸리기 때문에

UI 가 데이터를 읽을 때까지 멈춰 있는 현상이 나타납니다.

데이타 건수는 엄청 많기 때문에 읽은 부분을 제외한 나머지 부분부터 추가로 읽어야 되는 상황이구요.


데이타베이스(오라클)에 쿼리 날리는 부분과 읽어오는 부분을 백그라운드 작업으로 돌려봤지만

마찬가지로 유아이는 멈춤 현상이 나타납니다.


혹시 같은 문제로 고민해보신분 있으면 답변좀 부탁드립니다.

4  COMMENTS
  • Profile
    채팅 2008.03.30 19:47
    쿼리가 시간이 적게 걸리도록 디자인하고 한번에 쿼리하는 용량을 적게하는 기본적인 방법외에는 답이 없을 것 같습니다.

    예전에 아폴로 같은 델파이용 DB라이브러리는 쿼리중간에 이벤트를 발생하도록 한 경우도 있었지만 요즘 db(rdbms포함)중에 그런것은 본적이 없습니다.

    조금 다른 관점인데 참고삼아 적습니다.

    거꾸로 생각해 보면 왜 UI가 멈춰야 하는지 알 수 있습니다.

    클라이언트프로그램이 db에 어떤 작업을 요청하는데 UI가 멈추지 않으면 어떤 일이 발생할지 생각해 보면 답이 나옵니다.

    버튼1: A(DB쿼리작업)->B(데이타조작)->C(UI갱신)
    버튼2: D(DB쿼리데이타중 특정데이타 보이기)

    이런 폼이 있을때 보통 A작업이 시간이 많이 걸립니다. 그런데 A가 UI를 멈추지 않는다면 버튼2나 버튼1은 쿼리작업이 종료될때까지 사용자가 작동하지 못하게 해야 합니다. 제대로 처리하려면 수시로 쿼리작업이 완료되었는지 확인을 하든가 스레드로 완료여부를 체크하고 완료후에 버튼1,2가 활성화되도록 해야 합니다.

    그정도는 별것 아니라고 볼수도 있지만 동시에 2이상의 쿼리를 해야하는 경우는 더 심각합니다.

    A쿼리->B쿼리->C쿼리 이런식으로 작업이 필요한 경우 개발자는 엄청나게 바빠집니다. A가 완료되었는지를 체크해야 하고 그리고 다시 B를 처리하도록 하고 다음으로 C가 처리되도록 해야 합니다.

    이런식으로 MDI 같은 프로그램을 만드는 경우는 거의 지옥입니다.


    개인적으로 UI프로그램을 만들면서 쿼리작업이 UI를 멈추는 것은 프로그래머에게는 축복이라고 생각합니다.

  • Profile
    백록화 2008.03.30 07:54

    이런걸 원하셨다면...

    http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=component&no=483

    흠...


  • Profile
    깔쌈보이 2008.03.29 04:14
    제가 지금 델파이와 C#을 겸하고 있는데요...

    지금 겪고 있는 문제는 어쩌면 당연하지 않나 생각됩니다.
    델파이도 몇몇 써드파티 컴포넌트들은 대량의 데이터를 가져오는 경우, 정지현상을 일으킵니다. 마우스로 클릭을 하면 응답 어쩌고 하는 글이 작업창에 나타나지요.

    TDBGrid와 같은 델파이에서 제공해주는 컴포넌트는 뭐라고 부르는지 까먹었는데, 화면에 보여줄 데이터를 앞 뒤로 얼만큼씩만 가져오기 때문에 빨리 나타나는 것입니다.

    C#에서도 그 방식으로 표현하는 방법이 있을겁니다. 없다면 그렇게 되도록 해야겠죠.
    저의 경우도 역시 대량의 데이터를 가져오는데, 저는 사용자분들에게 그냥 "데이터가 많으면 그 만큼 시간이 소요되니 참고 기다리세요... 오래 걸려도 몇촌데 기다리세요 ^^;" 라고 해버립니다. 그럼 다행스럽게도 고개를  끄덕여서 무사히 넘어갔습니다. ^^;


  • Profile
    김원기 2008.03.29 03:44
    안녕하세요.

    멈춰있다는 말인가요? 아니면 아에 멈춰버린다는 말인가요??