小编Kir*_*iev的帖子

Delphi XE2 datasnap回调示例

我试图创建一个如何使用calbacks交换对象的小例子,但我遇到了一些问题.

  1. 当服务器创建并广播对象时,一些客户端回调连接会随着时间的推移随机关闭(有时在服务器发送后像100.000对象,有时甚至在100以后).
  2. 当客户端调用服务器方法来广播对象时,会发生关闭与服务器的客户端连接.所有这些都阻止我将当前项目转换为真正的客户端服务器.这是我的源代码,包括服务器和客户端的可执行文件: DataSnapExample.rar

PS我试过Mat DeLong的监控演示,我在服务器的主窗体上放了一个ttimer,调用广播消息菜单事件,结果是一样的 - 发送消息一段时间后,一些客户端断开连接.我担心这是因为Delphi XE2 Datasnap中的客户端 - 服务器错误.以下是演示:DataSnap XE2 - 统一连接监控示例组件

有人能告诉我这是不是我的错?谢谢...

delphi callback datasnap delphi-xe2

6
推荐指数
0
解决办法
3588
查看次数

如何根据枚举类型信息调用重载函数?

我想为几个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)

delphi typeinfo

5
推荐指数
1
解决办法
189
查看次数

Datasnap内存消耗

我正在研究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)

memory delphi datasnap

5
推荐指数
0
解决办法
468
查看次数

标签 统计

delphi ×3

datasnap ×2

callback ×1

delphi-xe2 ×1

memory ×1

typeinfo ×1