Q&A

  • 메모리 에러에 대해
에러 내용은 Exception EDBEngine Error in module ***.exe at 0008cfc6

Insufficient memory for this operastion. Alias ***

이정도 입니다.



프로그램을 작성중이라서 실행하고 종료하고 실행하고 종료하고를 반복하다보면

위의 에러가 나오네요...



1.

동적 폼을 만들지 않는 관계로 디자인 시에 모두 만들어 놓고 showmodal 로 부릅니다.

그래서 폼을 free 를 시키거나 하지 않습니다. 이것이 문제가 되나요?



2.

또다른 하나는 Table 마다 쿼리를 사용하여 디비그리드에 연결시켜 놓고 사용합니다.

편하거든요^^ 그리곤 close를 하지 않아도 문제가 없길래 그냥두었는데

이것이 문제가 될까요?



위 2가지가 아니라면 메모리 부족에러가 나올만한 것이 제 생각엔 없는 것 같은데..

고수님들의 도움 기다리겠습니다.

그럼,,,



1  COMMENTS
  • Profile
    한전기공(주) 2000.10.13 01:36
    > 에러 내용은 Exception EDBEngine Error in module ***.exe at 0008cfc6

    > Insufficient memory for this operastion. Alias ***

    > 이정도 입니다.

    >

    > 프로그램을 작성중이라서 실행하고 종료하고 실행하고 종료하고를 반복하다보면

    > 위의 에러가 나오네요...

    >

    > 1. 동적 폼을 만들지 않는 관계로 디자인 시에 모두 만들어 놓고 showmodal 로

    > 부릅니다.

    > 그래서 폼을 free 를 시키거나 하지 않습니다. 이것이 문제가 되나요?



    답변 : EDBEngine Error와는 무관하지만 좋지않은 프로그램 습관 같습니다.

    메모리를 동적으로 생성하가나 Form을 생성할 경우 free시키는 습관을

    드리는것이 좋다고 저는 생각하거든요.

    ex) procedure TfrmUStocks.FormClose(Sender: TObject;

    var Action: TCloseAction);

    begin

    Action := caFree;

    end;



    > 2. 또다른 하나는 Table 마다 쿼리를 사용하여 디비그리드에 연결시켜 놓고

    > 사용합니다. 편하거든요^^ 그리곤 close를 하지 않아도 문제가 없길래

    > 그냥두었는데 이것이 문제가 될까요?



    답변 : Table이나 Query를 사용할 경우 위와같이 하면 제생각에는 언제가는

    문제가 발생할 것 같습니다. 깔끔한 코딩을 하려면 Table나 Query를

    Open 하기전에 먼저 Close 한다음 Open하면 문제가 없을것 같군요.

    그리고, 또 하나 Table를 쓰는것 보다는 Query를 쓰는 습관을 드리세요.

    Table은 데이터가 많을경우 시간이 많이 걸리고, 메모리도 많이 차지하죠.

    Filter도 사용해야 하구요. Query는 사용은 복잡하지만 다양한 조건의

    자료를 찾기가 쉽더라구요.

    ex)

    procedure TfrmTest.fnOpenCompany(sGubun: string);

    begin

    with qryMethod do begin

    Close;

    SQL.Clear;

    SQL.Add('SELECT NAME ');

    SQL.Add(' FROM COMPANY ');

    SQL.Add(' WHERE GUBUN = :GUBUN ');

    ParamByName('GUBUN').AsString := sGubun;

    open;

    end;

    end;



    > 위 2가지가 아니라면 메모리 부족에러가 나올만한 것이 제 생각엔 없는 것 같은데..

    > 고수님들의 도움 기다리겠습니다.

    > 그럼,,,

    >



    ※ 위와 같이 코딩을 했는데도 "Exception EDBEngine Error ..." 이런 Error가

    발생하면 BDE setting을 다음과 같이 바꿔보세요.



    1. BDE Administrator를 실행합니다.

    2. Configuration Tab을 선택합니다.

    3. System - INIT의 SharedMemoSize를 8192로 설정합니다.

    4. Apply후 저장합니다.



    위와 같이하면 될것 같습니다.

    제 경험으로 특히 AppServer를 중간에둔 3Tier로 개발하여 많은 사용자가

    동시에 사용할때 이문제가 자주발생하더라구요.



    즐거운 하루되세요.