Q&A

  • TSmallintArray의 괴현상,,


var
  i:integer;  
  a:Array [1..255] of TSmallintArray;
begin
  for i:=1 to 255 do
  begin
    A[i]:=TSmallIntArray.Create(0,0);
    A[i].AutoSize:=false;
    A[i].Capacity:=30000;
  end;
end;

이렇게 실행을 하면 Capacity 부분에서 다음과 같은 에러가 떨어집니다.

ELowCapacityError With message
'The DecisionCube Capacity is low. please deactivate dimensions or change the data set.'

그런데 이상한건 똑같은 소스가 노트북(인텔싱글코어)에서는 안그러는데 데스크탑(AMD 듀얼코어)에서만 그럽니다.

쓰고 있는 건 Delphi7버전입니다.

하루 종일 왜그럴까 생각해 보고 데스크탑 델파이를 재설치와 델파이 서비스팩 업그레이드도 해보았지만

도무지 감조차 오지 않습니다ㅜ

차이점이라면 CPU가 싱글이냐 듀얼이냐 차이뿐인데ㅜ

아시는 분 조언 부탁합니다.

var
  a:TSmallintArray;
begin
  A:=TSmallIntArray.Create(0,0);
  A.AutoSize:=false;
  A.Capacity:=30000;
end;

이 경우도 마찬가지입니다.

그리고 AMD싱글코어 데스크탑과 인텔 듀얼코어에서도 테스트해본바 정상 작동합니다.

본 컴퓨터의 윈도우도 다시 깔아봤지만 여전히 위와 같은 에러가 떨어집니다.

도대체 왜 그런지 답답하기만 합니다;;
1  COMMENTS
  • Profile
    서해근 2008.09.30 23:38
    알고 보니 제 데스크탑 메모리가 2기가 인데 그게 문제 였던거 같네요.

    델파이 버그네요;;

    델마당의 빠야님께서 도움주셔서 알게됐습니다;;

    해결법은 아래와같이 Unit를 만들어서 Project에 포함시켜서 컴파일하니 해결됩니다.



    {-------------------------------------------------------------------------------

    Bug workaround for 'The DecisionCube capacity is low' bug

    ________________________________________________________________________________

    BUG DESCRIPTION
    If you have a lot of physical memory or a large page file, you may find that a
    DecisionCube raises the following exception whenever the DecisionCube's data
    set is opened:
    Exception class: ELowCapacityError
    Message: "The DecisionCube capacity is low. Please deactivate dimensions or
    change the data set."
    The exception will occur whenever the sum of the available physical memory and
    the available page file memory exceeds 2 GBytes. This is caused by a bug in
    Delphi - more specifically: an integer being out of range in the procedure
    GetAvailableMem (unit Mxarrays).

    AFFECTED DELPHI VERSIONS
    Delphi 3-7 (with the DecisionCube package installed)

    WORKAROUND
    Add this unit to your project.
    -------------------------------------------------------------------------------}

    unit DecisionCubeBugWorkaround;

    interface

    uses Windows, Mxarrays;

    implementation

    function GetAvailableMem: Integer;
    const
    MaxInt: Int64 = High(Integer);
    var
    MemStats: TMemoryStatus;
    Available: Int64;
    begin
    GlobalMemoryStatus(MemStats);
    if (MemStats.dwAvailPhys > MaxInt) or (Longint(MemStats.dwAvailPhys) = -1) then
    Available := MaxInt
    else
    Available := MemStats.dwAvailPhys;
    if (MemStats.dwAvailPageFile > MaxInt) or (Longint(MemStats.dwAvailPageFile) = -1) then
    Inc(Available, MaxInt div 2)
    else
    Inc(Available, MemStats.dwAvailPageFile div 2);
    if Available > MaxInt then
    Result := MaxInt
    else
    Result := Available;
    end;

    initialization
    Mxarrays.SetMemoryCapacity(GetAvailableMem);
    end.

    • 델코이
    • 2008.10.06 18:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2008.10.07 19:07
      procedure TForm1.btnInputClick(Sender: TObject); begin AdvStringGrid1.Cells[1, 1] := Edit1.Tex...
    • 이정욱
      2008.10.05 03:37
      그냥 폼에서 KeyPreview 속성을 True로 주시고 그 폼의 키 이벤트에서 처리 하시면 될것 같습니다.
    • 윤창훈
      2008.10.05 12:43
      답변 감사드립니다. 제가 만드는 프로그램은 label이 1000개정도 화면에 배치되면서 focus를 갖고...
    • 김진
    • 2008.10.03 05:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.10.05 03:39
      TFileStream 으로 위에 검색 란에서 검색해 보시면.. 아주 많은 예제들이 있습니다...
    • 이선구
    • 2008.10.03 03:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • phono
      2008.10.07 18:05
      ??? 퀵레포트의 라벨캡션으로 실수 인쇄할경우.. 보통 라벨.caption := FormatFloat('#,##0.#...
    • steps
      2008.10.04 20:31
      이미지밖에 캡션을 달려면 이미지컴포넌트의 캔버스가 이미지보다 커야겠지요. 이미지와 캡션들의 너비...
    • 이창엽
    • 2008.10.02 19:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2008.10.02 21:50
      안녕하세요.. 실행파일이 실행되었다면 그건 프로세서이구.. 데이타 영역이 아닌 메모리에 상주하게 되...
    • 윤박사
    • 2008.10.02 18:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.10.02 20:01
      대부분 속도는 비슷할거구요, 소켓 통신시 과부하걸려 데이타 손실등의 원인을 보면 개발자가 한 함수내...
    • 홍성락
      2008.10.03 19:35
      추가 질문에 대하여... 제가보기엔 2가지 사항으로 판단됩니다. 소켓으로 받는 처리가 잘 코딩된 전제...
    • 이근홍
    • 2008.10.02 04:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.02 06:35
      if edtLocalIP.text:='' then if edtLocalIP.text ='' then 이게 아닐지요.
    • 이강석
    • 2008.10.02 02:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2008.10.02 02:39
      패킷 몇개를 날려먹고 종료할
    • 이강석
    • 2008.10.06 19:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2008.10.07 00:21
      이게 왜 여기 달렸지??? ㅠㅠ
    • 박종철
    • 2008.10.01 20:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박종철
      2008.10.01 23:32
      검색을 하다 보니 BLOB 크기 때문에 발생하는 문제로 판단이 되었습니다. (파일크기를 아주 팍 줄여서 ...
    • 이근홍
    • 2008.10.01 18:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2008.10.03 01:22
      Xvid 코덱을 설치 하시면 됩니다. 통합코덱을 설치 하셔두 되구요..
    • 아르스
    • 2008.10.01 05:52
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 머문자리
      2008.10.01 02:06
      참고로 델파이도 여러피시에서 설치해서 확인해보고 indy component 버전도 7,10에서 확인하여도 결과는 ...
    • 이정욱
      2008.10.01 04:09
      정확하게 이해를 못하겠는데요.. 혹시 접속을 받는 PC의 윈도우 방화벽이 켜져 있는게 아닐까요?
    • 머문자리
      2008.10.01 04:23
      리눅스 서버를 체크하구요 21번 포트로 데몬 죽였다 살려가면서 확인하는데 쉽지가 않아요..
    • 머문자리
      2008.10.01 04:39
      감사합니다 이정욱님 접속을 하는 PC의 방화벽 설정때문인 듯 합니다. 방화벽이 켜져 있는경우 원격지 ...
    • 서해근
    • 2008.09.30 22:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 서해근
      2008.09.30 23:38
      알고 보니 제 데스크탑 메모리가 2기가 인데 그게 문제 였던거 같네요. 델파이 버그네요;; 델마당...
    • 소울해커
      2008.09.30 20:56
      그냥 TEdit 에 코딩으로 조작해서 씁니다. 외부 컴포넌트를 쓰게될 경우 그 편리함 보다 여러모로 에...
    • 장성호
      2008.09.30 21:01
      팁 게시판에 TEdit를 조작해서 사용하는 방법이... http://www.delphi.co.kr/zboard/view.php?id=tips...
    • 마바리
      2008.10.01 21:50
      불편한게 무엇인지... 원하시는 기능이 무엇인지 알면 더 낳을듯 한데요
    • 아폴론
      2008.10.02 06:16
      천 자리마다 콤마는 안 찍히네요?..
    • 나현아빠
      2008.10.03 13:39
      답변들 감사합니다. 특별히 없나 보네요.. 걍 수정해서 쓰기로 마음 먹고, 필요한거 수정했습니다. ...
    • 델만세
    • 2008.09.30 00:30
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2008.09.30 20:54
      조회할 쿼리를 먼저 만드셔야겠죠. WHERE 구문은 시작기간과 종료기간을 파라미터로 받아서 그 기간사...
    • 델만세
      2008.10.02 04:06
      아~ 감사합니다.