阿
阿亮
Unregistered / Unconfirmed
GUEST, unregistred user!
以下代码在指定文件夹中创建一个包含指定单元个数的项目框架,
编译后大小约为 680KB,当单元数<=1018时,一切正常,当单元
数超过此限制时,Win98系统报内存不足!数了数,项目Uses的
单元数刚好1024个。
在Win2k或Winxp中不存在此问题,单元数达到2000个也没事。
编译参数 {$M} {$Z},已经试过了,不行
环境:打过补丁的 Delphi 5.0
各位分析一下,这仅是Win98系统的问题吗?有什么招能超过此限制?
procedure TForm1.Button1Click(Sender: TObject);
const
CRFormCount: Integer = 1018;
CRDirectory: string = 'f:/formcount/';
var
i: Integer;
sObj, sPro: TStringList;
begin
sPro := TStringList.Create;
sObj := TStringList.Create;
sObj.Add('program Project1;');
sObj.Add('');
sObj.Add('uses');
sObj.Add(' Forms,');
try
for i := 1 to CRFormCount do
begin
sPro.Clear;
sPro.Add('unit Unit' + IntToStr(i) + ';');
sPro.Add('');
sPro.Add('interface');
sPro.Add('');
sPro.Add('uses');
sPro.Add(' Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;');
sPro.Add('');
sPro.Add('type');
sPro.Add(' TForm' + IntToStr(i) + ' = class(TForm)');
sPro.Add(' private');
sPro.Add(' { Private declarations }');
sPro.Add(' public');
sPro.Add(' { Public declarations }');
sPro.Add(' end;');
sPro.Add('');
sPro.Add('var');
sPro.Add(' Form' + IntToStr(i) + ': TForm' + IntToStr(i) + ';');
sPro.Add('');
sPro.Add('implementation');
sPro.Add('');
sPro.Add('{$R *.DFM}');
sPro.Add('');
sPro.Add('end.');
sPro.SaveToFile(CRDirectory + 'Unit' + IntToStr(i) + '.pas');
sPro.Clear;
sPro.Add('object Form' + IntToStr(i) + ': TForm' + IntToStr(i));
sPro.Add(' Left = 196');
sPro.Add(' Top = 132');
sPro.Add(' Width = 544');
sPro.Add(' Height = 375');
sPro.Add(' Caption = ''Form' + IntToStr(i) + '''');
sPro.Add(' Color = clBtnFace');
sPro.Add(' Font.Charset = DEFAULT_CHARSET');
sPro.Add(' Font.Color = clWindowText');
sPro.Add(' Font.Height = -11');
sPro.Add(' Font.Name = ''MS Sans Serif''');
sPro.Add(' Font.Style = []');
sPro.Add(' OldCreateOrder = False');
sPro.Add(' PixelsPerInch = 96');
sPro.Add(' TextHeight = 13');
sPro.Add('end');
sPro.SaveToFile(CRDirectory + 'Unit' + IntToStr(i) + '.dfm');
if i = CRFormCount then
sObj.Add(' Unit' + IntToStr(i) + ' in ''Unit' + IntToStr(i) + '.pas'' {Form' + IntToStr(i) + '};')
else
sObj.Add(' Unit' + IntToStr(i) + ' in ''Unit' + IntToStr(i) + '.pas'' {Form' + IntToStr(i) + '},')
end;
sObj.Add('');
sObj.Add('{$R *.RES}');
sObj.Add('');
sObj.Add('begin');
sObj.Add(' Application.Initialize;');
sObj.Add(' Application.CreateForm(TForm1, Form1);');
sObj.Add(' Application.Run;');
sObj.Add('end.');
sObj.SaveToFile(CRDirectory + 'Project1.dpr');
finally
sPro.Free;
sObj.Free;
end;
end;
编译后大小约为 680KB,当单元数<=1018时,一切正常,当单元
数超过此限制时,Win98系统报内存不足!数了数,项目Uses的
单元数刚好1024个。
在Win2k或Winxp中不存在此问题,单元数达到2000个也没事。
编译参数 {$M} {$Z},已经试过了,不行
环境:打过补丁的 Delphi 5.0
各位分析一下,这仅是Win98系统的问题吗?有什么招能超过此限制?
procedure TForm1.Button1Click(Sender: TObject);
const
CRFormCount: Integer = 1018;
CRDirectory: string = 'f:/formcount/';
var
i: Integer;
sObj, sPro: TStringList;
begin
sPro := TStringList.Create;
sObj := TStringList.Create;
sObj.Add('program Project1;');
sObj.Add('');
sObj.Add('uses');
sObj.Add(' Forms,');
try
for i := 1 to CRFormCount do
begin
sPro.Clear;
sPro.Add('unit Unit' + IntToStr(i) + ';');
sPro.Add('');
sPro.Add('interface');
sPro.Add('');
sPro.Add('uses');
sPro.Add(' Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;');
sPro.Add('');
sPro.Add('type');
sPro.Add(' TForm' + IntToStr(i) + ' = class(TForm)');
sPro.Add(' private');
sPro.Add(' { Private declarations }');
sPro.Add(' public');
sPro.Add(' { Public declarations }');
sPro.Add(' end;');
sPro.Add('');
sPro.Add('var');
sPro.Add(' Form' + IntToStr(i) + ': TForm' + IntToStr(i) + ';');
sPro.Add('');
sPro.Add('implementation');
sPro.Add('');
sPro.Add('{$R *.DFM}');
sPro.Add('');
sPro.Add('end.');
sPro.SaveToFile(CRDirectory + 'Unit' + IntToStr(i) + '.pas');
sPro.Clear;
sPro.Add('object Form' + IntToStr(i) + ': TForm' + IntToStr(i));
sPro.Add(' Left = 196');
sPro.Add(' Top = 132');
sPro.Add(' Width = 544');
sPro.Add(' Height = 375');
sPro.Add(' Caption = ''Form' + IntToStr(i) + '''');
sPro.Add(' Color = clBtnFace');
sPro.Add(' Font.Charset = DEFAULT_CHARSET');
sPro.Add(' Font.Color = clWindowText');
sPro.Add(' Font.Height = -11');
sPro.Add(' Font.Name = ''MS Sans Serif''');
sPro.Add(' Font.Style = []');
sPro.Add(' OldCreateOrder = False');
sPro.Add(' PixelsPerInch = 96');
sPro.Add(' TextHeight = 13');
sPro.Add('end');
sPro.SaveToFile(CRDirectory + 'Unit' + IntToStr(i) + '.dfm');
if i = CRFormCount then
sObj.Add(' Unit' + IntToStr(i) + ' in ''Unit' + IntToStr(i) + '.pas'' {Form' + IntToStr(i) + '};')
else
sObj.Add(' Unit' + IntToStr(i) + ' in ''Unit' + IntToStr(i) + '.pas'' {Form' + IntToStr(i) + '},')
end;
sObj.Add('');
sObj.Add('{$R *.RES}');
sObj.Add('');
sObj.Add('begin');
sObj.Add(' Application.Initialize;');
sObj.Add(' Application.CreateForm(TForm1, Form1);');
sObj.Add(' Application.Run;');
sObj.Add('end.');
sObj.SaveToFile(CRDirectory + 'Project1.dpr');
finally
sPro.Free;
sObj.Free;
end;
end;