我试图创建一个如何使用calbacks交换对象的小例子,但我遇到了一些问题.
- 当服务器创建并广播对象时,一些客户端回调连接会随着时间的推移随机关闭(有时在服务器发送后像100.000对象,有时甚至在100以后).
- 当客户端调用服务器方法来广播对象时,会发生关闭与服务器的客户端连接.所有这些都阻止我将当前项目转换为真正的客户端服务器.这是我的源代码,包括服务器和客户端的可执行文件: DataSnapExample.rar
PS我试过Mat DeLong的监控演示,我在服务器的主窗体上放了一个ttimer,调用广播消息菜单事件,结果是一样的 - 发送消息一段时间后,一些客户端断开连接.我担心这是因为Delphi XE2 Datasnap中的客户端 - 服务器错误.以下是演示:DataSnap XE2 - 统一连接监控示例组件
有人能告诉我这是不是我的错?谢谢...
我想为几个TImages画一些主题部分.在我的下面的代码中,GetElementDetails需要一定的枚举值.我有PTypeInfo枚举类型,但我不知道如何键入类型i转换为枚举类型.
procedure TForm1.Button1Click(Sender: TObject);
procedure drawType(c: tcanvas; ti: ptypeinfo);
var
r: trect;
i: integer;
details: TThemedElementDetails;
begin
r.Left := 0; r.Top := 0; r.Right := 19; r.Bottom := 19;
for i := GetTypeData(ti).MinValue to GetTypeData(ti).MaxValue do begin
// How to cast i to the enum type of ti?
details := StyleServices.GetElementDetails( ???(i) );
StyleServices.DrawElement(c.Handle, details, R);
if (i mod 10 = 0) and (i > 0) then begin
r.Left := 0; r.Right := 19; …Run Code Online (Sandbox Code Playgroud) 我正在研究datasnap客户端服务器软件.执行时,服务器从我的数据库中读取数据并将其保存在内存中.每个客户端在连接到服务器时,都会请求数据调用服务器上的过程.但是我遇到了服务器端大量内存消耗的问题.
服务器lifeCycle设置为调用或会话不会影响服务器使用的巨大内存.
在此测试中,启动服务器时,它使用大约5MB.连接客户端并从服务器获取数据,使服务器使用另外58MB.对于每个下一个客户!这只是6个对象.在我真正的软件服务器中,为客户端获得超过200MB的空间.我的旧版软件有50多个客户端正在运行.
我使用Delphi XE6,XE7,XE8,10,10和Update 1进行了测试.ReportmemoryLeakAtShutdown在客户端报告任何内容,在服务器上报告的数量非常少,但报告为已知错误.
我做错了什么,或者是德尔福问题?
这是我的测试来源:
服务器和客户端的通用单元:
TOwnedFlag = (ofOwned);
TOwnedFlags = set of TOwnedFlag;
TMarshalList<T: class> = class
private
FList: TArray<T>;
FFlags: TOwnedFlags; // use set for internal flags because sets are not marshalled
public
constructor Create(AList: TArray<T>; AOwnsItems: Boolean = True); overload;
constructor Create; overload;
destructor Destroy; override;
property List: TArray<T> read FList;
end;
TMyClass = class
ID: integer;,
Name: String;
Desc: String;
Desc1: String;
Desc2: String;
Desc3: String;
....
constructor Create;
end;
implementation
constructor TMarshalList<T>.Create(AList: …Run Code Online (Sandbox Code Playgroud)