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;
이 경우도 마찬가지입니다.
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;
이 경우도 마찬가지입니다.
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."
As a result, the DecisionCube cannot be activated.
Exception class: ELowCapacityError
Message: "The DecisionCube capacity is low. Please deactivate dimensions or change the data set."
As a result, the DecisionCube cannot be activated.
Steps:
1. Open the DecisionCube's data set. This will trigger the bug.
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
1. Open the DecisionCube's data set. This will trigger the bug.
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
As a workaround, add a unit with the following code to your 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.
-------------------------------------------------------------------------------}
{-------------------------------------------------------------------------------
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.