Q&A

  • 최적화에 대하여
제가 할줄 아는게 델파이뿐인데, 델파이가 참 좋은 랭귀지툴이라 생각하고 있어염. 근데, 어떤 형이 델파이로 프로그램을 만들면 왜 그리 프로그램 사이즈도
커지고, 왜그리 메모리도 많이 차지하냐고 하더군여ㅡㅡ;
그래서 목표가 생겼져, 최적화.............
어떻게 해서든,, 엄청작아진 프로그램 사이즈와, 메모리점유을을 가진 프로그램을 델파이로 만들어보는것!!! ㅡㅡ^
100kb 를 넘지 않을 정도로.. ^^;;

도움이 되는 좋은 정보를 알고 계시면 좀 .. 알려주심 감사드리겠습니다. ^^

감사합니다. ^^;;
4  COMMENTS
  • Profile
    프리맨 2002.06.13 00:52


    델파이도 호출되지 않는 루틴은 실행파일에 포함시키지 않으므로써 실행파일
    크기를 상당히 줄입니다. 다만 '가상메소드'에 대해서 만큼은 호출되지
    않더라도 실행파일에 포함됩니다. 빈폼을 컴파일 했을때 실행파일의 내용
    대부분은 이 가상메소드가 차지합니다. 사실 VCL의 전체 라이브러리중에
    300~400k 만을 추려내는것도 대단한거지요. 보다 큰 프로젝트를 해보시면
    다른 언어에 비해 확실히 작고 가벼운 실행파일을 만든다는것을 느끼실겁니다.
    메모리의 사용에 대해서도 마찬가지 입니다. 기본 점유율은 상당히 큰편이지만
    스트링 타입의 'Copy On Write', 그래픽 리소스의 공유, 동적 메모리의 참조,
    객체간의 참조, 등등 내부적으로는 매우 최적화 되어 있습니다.
  • Profile
    GanJang 2002.06.13 02:02
    넵.. 지금 제가 만든 간단한 알람 프로그램이 실행파일 사이즈가.. 500kb 를..
    넘어가고 있습니다. -_=;;
    아래 링크의 파일분할 소스예제를 보니 실행파일 크기가.. -_-.. 52k 던데요..
    모든 폼 파일을 res 형태로 만든거 같은데.. 아무튼,, 이게.. 어떻게 가능한지.. -_-;;

    http://www.delphi.co.kr/zb4pl5/view.php?id=component&page=1&category=&sn=off&ss=on&sc=on&keyword=분할&select_arrange=headnum&desc=asc&no=768

  • Profile
    프리맨 2002.06.13 02:42


    소스를 보시면 VCL 객체가 전혀 사용되지 않았습니다.
    객체를 사용하지 않았으니 객체안의 가상메소드도 포함될 필요가 없는거죠.

    uses절에 연결된 유닛은 Windows API 와 SysUtils 뿐이지요.
    만약 SysUtils도 연결하지 않는다면 약 30~40k를 더 줄일수 있습니다.
    이 예제에서는 res파일을 이용해 메뉴,대화상자등을 만들었는데..
    C 언어에서 제공하는 대화상자 리소스 편집기를 이용하셔도 만들수 있고요..
    구현법도 C 언어와 동일합니다. 대화상자에 관련된 코드가 Windows API
    내부에 있는만큼 실행파일은 작아집니다. 단, 작성의 불편함은 감수해야겠죠...
  • Profile
    GanJang 2002.06.13 03:19

    에고.. 손수 파일 다운로드 받으셔서,, 소스까지 확인해 주시고..

    정말 감사 T.T;;

    월드 컵.. 화이팅입니다.... =_+;;

    • 최용일
      2002.06.13 00:27
      제가 말한 대로 아이콘 바꾸어 보셨나요? Project/Options...에서 Application탭에서 바꾸어 보세요. 25...
    • 이영주
      2002.06.13 00:50
      저... Application탭에서 색을 바꾸는 부분은 없는데.. 뭘 말씀 하시는지... 잘몰겠떠염.. 상세히점......
    • 최용일
      2002.06.13 01:47
      아이콘 칼라바꾸는 것은 다른 툴로 해야죠... 델파이 이미지에디터나 마이크로안젤로같은... 쩝 제 말은...
    • 이현철
      2002.06.16 00:09
      Ping 소스를 함수 형식으로 만들어 보세요. Function isPing(IpAddress:String):Boolean begin  ...
    • 성대현
    • 2002.06.12 21:40
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김은영
    • 2002.06.12 21:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2002.06.13 03:21
      안녕하세요. 전 질문하고 데이터가 또 틀리네요. packed라해도 변환하는데는 아무런 문제가 없어요 va...
    • 이동현
    • 2002.06.12 21:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김지엽
      2002.06.12 22:43
      ALTER TABLE 테이블명 DROP 컬럼명
    • 염상철
      2002.06.19 19:46
      Group Band쓰시면..되는데..
    • 김광호
    • 2002.06.12 21:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 아폴론
    • 2002.06.12 20:56
    • 4 COMMENTS
    • /
    • 0 LIKES
    • KDDG_zzang
      2002.06.12 21:01
         if key = vk_Next then begin       key := word(#0);&nbs...
    • 아폴론
      2002.06.13 00:27
      procedure TFm102.Ne_gjmnKeyDown(Sender: TObject; var Key: Word;   Shift: TShiftStat...
    • KDDG_zzang
      2002.06.13 02:18
      죄송한데요. 질문이 잘 이해가 안 되요. ^^;; 원하시는 결과가 무엇인지를 다시 한번 자세하게 설명 부...
    • 아폴론
      2002.06.13 04:38
      procedure TFm102.Ne_gjmnKeyDown(Sender: TObject; var Key: Word;   Shift: TShiftState); ...
    • 김진철
    • 2002.06.12 20:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 곰다방~미스김
      2002.06.12 22:38
      휠마우스 드라이버를 해당제품 만든곳에서 업데이트 받으세요.... 그럼 됩니다...... -_-; 아니면.........
    • GanJang
    • 2002.06.12 20:23
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 프리맨
      2002.06.13 00:52
      델파이도 호출되지 않는 루틴은 실행파일에 포함시키지 않으므로써 실행파일 크기를 상당히 줄입니다....
    • GanJang
      2002.06.13 02:02
      넵.. 지금 제가 만든 간단한 알람 프로그램이 실행파일 사이즈가.. 500kb 를.. 넘어가고 있습니다. -_=;...
    • 프리맨
      2002.06.13 02:42
      소스를 보시면 VCL 객체가 전혀 사용되지 않았습니다. 객체를 사용하지 않았으니 객체안의 가상메소드...
    • GanJang
      2002.06.13 03:19
      에고.. 손수 파일 다운로드 받으셔서,, 소스까지 확인해 주시고.. 정말 감사 T.T;; 월드 컵.. ...
    • 이은호
    • 2002.06.12 19:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2002.06.18 07:05
      음 저는 DirectShow하는 방법 뿐이 몰라서..^^;; 우선 디바이스의 포인터를 얻은후 ... KSProperty얻고...
    • 이동현
    • 2002.06.12 19:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2002.06.18 02:34
      '[id] = '+QuotedStr(msg1)  AND '[password] ='+QuotedStr(msg2); 'Field명1 = ' + Value...
    • 윤도상
    • 2002.06.12 19:08
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.06.12 19:44
      Oracle Net setting을 먼저 하셔야 합니다. setting하면 서비스이름인가 하는것을 만들거든요.... 그것을...
    • 윤도상
      2002.06.12 20:38
      오라클은 폴더 또는 파일명에 ( 가 포함되어있으면 안됩니다. 혹 다른 문자도 안되는지는 모르겠네요., ...
    • 윤도상
      2002.06.12 20:33
      BDE에서는 데이터베이스 명에서 더블클릭해서 사용자 이름과 패스워드를 주면 로긴이 됩니다. 그리고 델...
    • 김수경
      2002.06.12 19:11
      아래와 같이 처리해 보세요.   1. F7(Trace Into), F8(Step Over) 키를 이용해서 단계적으로 ...
    • 이영주
      2002.06.12 19:18
      감사합니다.. 아래와 같이 해보았는데염.... 1번은 전혀 소용이 없어염.. 키를 누르자마자 cpu창이 뜨...
    • 김수경
      2002.06.13 00:33
      2 번이 올바르게 실행된다면 Delphi엔 문제가 없는 것 같습니다. 단계별로 Debugging이 불가능 하다면 Ful...
    • 이영주
      2002.06.13 00:57
      저 우선 감사합니다.. ^^; full debug mode라는 건 없구염.. Project/Option/Compiler 쪽에 있는 모든 ...
    • 나그네
    • 2002.06.12 18:31
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김수경
      2002.06.12 18:58
      받는 쪽 컴터의 통신 Buffer가 가득 찬 경우에 자료를 보낼 경우 자료가 제대로 전송되지 않습니다(이런 ...
    • 장명선
      2002.06.12 18:53
      에공 에공 아직까지 안되셨나부네요 어떤 기계인지는 모르지만 디기 까다롭네요 혹 메뉴얼같은게 있으...
    • 김관식
    • 2002.06.12 12:17
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2002.06.18 02:38
      if not Table1.FindKey([Input.Text]) then 이렇게 쓰셨는데... 아마도 FindKey = True or False 이런식으...
    • 이재식
      2002.06.12 12:44
      안녕하세요 실무상에서는 테이블 컴포넌트를 안쓰는것이 좋다고 전 개인적으로 생각합니다 ^^; 아무...
    • 박희경
    • 2002.06.12 10:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.10.09 00:03
      domain name server 이므로 범용서버를 찾으시면 가능합니다.
    • 강영원
    • 2002.06.12 10:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2002.06.12 12:36
      안녕하세요. 님이 원하시는 내용을 위해서 몇가지 추가를 해야하고 또 몇가지를 삭제해야 합니다. 스트...
    • 박영수
    • 2002.06.12 06:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.12 11:30
      안녕하세요. 최용일입니다. 흠~ 이 부분에서 Access violation에러가 날 이유는 없는데요... 한 줄씩 디...