使用 DataSnap 进行大流处理

2023-11-30

我试图在 DataSnap 服务器/客户端之间传输一些大流(~1Mb),但无济于事。我试图理解吉姆·蒂尔尼的代码(http://blogs.embarcadero.com/jimtierney/2009/04/06/31461)运气不好,我什至无法编译代码,因为缺少库,无论如何......

我能够接收的流的最大大小是 64k,所以any您可以提供的提示/想法/代码示例周末程序员像我这样的人会很受欢迎。谢谢你!

我的服务器代码:

function TsrvMethods.getStream(iCount: integer): TStream;
begin
  Result := dummyStream('0123456789', iCount);
end;

function dummyStream(sCnt: string; iCount: integer): TStream;
begin
  Result := TMemoryStream.Create;
  while iCount > 1 do begin
    Result.Write(Pointer(sCnt)^, Length(sCnt));
    Dec(iCount);
  end;
  Result.Seek(0, TSeekOrigin.soBeginning);
end;

我的客户调用代码:

procedure TfrmMain.butStreamClick(Sender: TObject);
var
  sStr : TStream;
begin
  cycleConnection; //make sure we have an active connection

  with TsrvMethodsClient.Create( SQLConn.DBXConnection, False ) do begin
    sStr := getStream( Integer(SpinCount.Value) );
    Free;
  end;
  FreeAndNil(sStr);
end;

事实上,我想我已经明白了。我将此作为答案发布,也许其他人也需要这个。

procedure TfrmMain.butStreamClick(Sender: TObject);
const
  iBufSize = 128;
var
  sStr : TStream;
  sMem : TMemoryStream;
  buf: PByte;
  iRead: integer;
begin
  cycleConnection;

  with TsrvMethodsClient.Create( SQLConn.DBXConnection, False ) do begin

    sStr := getStream( 500000 ); //500k stream

    GetMem(buf, iBufSize);
    sMem := TMemoryStream.Create;
    try
      repeat
        iRead := sStr.Read( Pointer(buf)^, iBufSize);

        if iRead > 0 then sMem.WriteBuffer( Pointer(buf)^, iRead);
        if iRead < iBufSize then break;
      until iRead < iBufSize;
    finally
      FreeMem(buf, iBufSize);
    end;

    Free;
  end;
  FreeAndNil(sStr);
  FreeAndNil(sMem);
end;

P.S.

通过搜索 DataSnap 代码示例,我发现一个(与速度相关的)改进是将 iBufSize 设置为 61440(或等效的十六进制值 $F000),这似乎是一次性可以接收的最大大小。如果接收流更大,则报告的大小将为 -1,并且需要上面的代码来读取整个流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DataSnap 进行大流处理 的相关文章

  • 将 ionic Zip 读取为内存流 C#

    我正在使用 Ionic Zip 通过以下方法将 ZipFile 提取到内存流 private MemoryStream GetReplayZipMemoryStream MemoryStream zipMs new MemoryStream
  • 获取 Youtube 上的游戏直播列表

    我正在尝试使用 Youtube 数据 API 来获取当前与游戏相关的直播流列表 但我找不到任何符合我需要的端点并返回每个频道的观看者数量 你们知道我该如何做到这一点吗 Thanks 游戏直播列表 videoCategoryId 20 是 游
  • 在 Delphi 7 中使用 TScreen

    我的 Delphi 7 应用程序显示 Screen DesktopWidth Screen DesktopHeight Screen Monitors 0 Width Screen Monitors 0 Height 并且 如果选择了第二台
  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • 如何从 wfstream 读取二进制数据?

    我从文件读取数据时遇到一个小问题 我希望能够读取 wstring 以及任意大小的原始数据块 大小以字节为单位 std wfstream stream file c str std wstring comType stream gt gt c
  • 获取字符、整数和日期字段的字段 oldValue 和 newValue

    我试图只保留表更改的历史记录 所以我想获取一个字段在更改为oldValue之前的值 然后获取它更改为newValue的值 两个值都应转换为字符串 因此 这是该表的一个示例 PartNumber Description 12345 Test
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • java套接字/输出流写入:它们会阻塞吗?

    如果我只写入输出流上的套接字 它会阻塞吗 只有读取才能阻塞 对吗 有人告诉我写入可以阻塞 但我只看到套接字读取方法的超时功能 Socket setSoTimeout 对我来说 写入可能会阻塞是没有意义的 如果我只写入输出流上的套接字 它会阻
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • 如何将 TGifImage 中的帧提取为位图?

    下面的演示尝试在表单的画布上绘制 GIF 这不起作用 图像不会前进 如何让它发挥作用 procedure TForm1 FormCreate Sender TObject begin GIF TGIFImage Create GIF Loa
  • Delphi DataSnap REST 服务器从 TStream 返回 JSON 数组,而不是二进制

    我有一个与 Android 客户端通信的 REST 服务器 我将它从 XE3 ish 升级到 Berlin 其中一个服务器方法返回一个包含 jpeg 的 TStream 并且工作得很好 很高兴将图像作为二进制图像返回 升级到 Berlin
  • 如何将 JSON 字符串转换为图像?

    我有一个将图像转换为 JSON 数组的应用程序 并将其保存到 blob 字段中 function getImage String var memorystream TMemoryStream jsonArray TJSONArray beg
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技
  • 在TImageViewer中,如何获取用户点击图片的位置?

    在TImageViewer控件中 用户可以缩放或平移图片 我的问题是 当用户点击图片时 如何获取用户在图片上的点击位置 尤其是用户可以对图片进行放大 缩小或平移之后 如何获取对应的图片点击位置呢 As shown below How to
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 和 之间有什么区别? (点)和 $(美元符号)?

    点和点有什么区别 和美元符号 据我了解 它们都是不需要使用括号的语法糖 The 运算符是为了避免括号 在它之后出现的任何内容都将优先于之前出现的任何内容 例如 假设您有一行内容如下 putStrLn show 1 1 如果你想去掉这些括号
  • 具有多个箱子和约束的无界背包

    我是 Python 编码新手 需要帮助解决具有多个垃圾箱 4 个垃圾箱 和约束的无界背包问题 这些箱子的重量限制分别为 10 5 10 5 7 和 7 每个箱子只能装满某些物品 例如 仓 0 只能填充项目 0 9 仓 1 只能填充项目 10
  • 从数组列表中删除元素的更有效方法

    我开发了一个像这样的数组列表 ArrayList
  • Run() 和 ShellExecute() 之间的区别

    我想通过 AutoIt 在 Windows 上的 shell 终端中执行某些操作 我知道有两种方法可以做到这一点 例如 Run ComSpec c myCommand SW HIDE and ShellExecute myCommand 我
  • Blob 存储中的空图像

    这就是我尝试将图像上传到 Azure blob 存储 然后上传位于此处的空文件的方法 我尝试在这里上传这张图片 CloudStorageAccount storageAccount new CloudStorageAccount new M
  • 绘制 2 度线性回归的困难

    我在用机器学习模型的 2 度曲线绘制 2d 线性回归时遇到了一些麻烦 这是我的代码 m 100 X 6 np random rand m 1 3 y 0 5 X 2 X 2 np random randn m 1 plt plot X y
  • Angular 2,同一页面上运行的两个应用程序之间的通信[重复]

    这个问题在这里已经有答案了 我正在寻找一种方法让两个 Angular 2 应用程序相互通信 我发现我应该提供共享服务 My main ts import bootstrap from angular platform browser dyn
  • Monodroid,Java 和 C# 之间的互操作

    我们在 Android 下有一个大型 Java 应用程序 大 只是意味着翻译该应用程序的工作量太大 我们必须访问一个用 Net编写的引擎 这个引擎也太 大 了 该引擎仅用于计算 因此我们寻求使用 monodroid 的解决方案 我们的主要问
  • iPhone Store Kit“无法连接到 iTunes Store”

    我正在努力将应用内购买添加到我的应用程序中 我能够收到productsRequest didReceiveResponse方法 并接收产品数组 当我添加一个时 我的问题出现了SK支付 to the SK支付队列 将产品添加到队列后 在pay
  • MySQL:如何复制行,但更改一些字段?

    我有大量想要复制的行 但我需要更改一个字段 我可以选择要复制的行 select from Table where Event ID 120 现在我想复制所有这些行并在设置时创建新行Event ID to 155 我怎样才能做到这一点 INS
  • 如何更改 Twitter Bootstrap 模式框的默认宽度?

    我尝试了以下方法 div class modal hide fade modal admin style display none div class modal header a class close a h3 h3 div div c
  • C# 整数数组的哈希码

    我有一个类 其内部只是一个整数数组 一旦构造完毕 数组就永远不会改变 我想预先计算一个好的哈希码 以便该类可以非常有效地用作字典中的键 数组的长度大约在30项以内 整数一般在 1000到1000之间 不是很聪明 但足以满足大多数实际目的 编
  • java 发送和接收二维数组

    我想通过问这个问题来实现的是学习如何发送和接收二维数组到另一台计算机 上下文是二维阵列是我的游戏的地图 当我开始游戏时 我想要一个选项是服务器还是客户端 如果是客户端 请指定服务器IP 然后服务器将发送客户端 其中一个将是另一个人 具有不同
  • 与 C# 的协方差

    我在 C 代码中遇到了一些有趣的协方差问题 我有一个通用的Matrix
  • 使用 JavaScript 的事件委托比 jQuery 的事件委托是否有性能优势?

    JavaScript parent addEventListener click function e if e target child code vs jQuery parent on click child function 边际 j
  • tomcat 7 基于表单的身份验证

    给定一个 Servlet HelloServlet WebServlet HelloServlet public class HelloServlet extends HttpServlet private static final lon
  • 输入类型“textVisiblePassword”与“text”:有什么区别?

    简短而甜蜜 我不知道有什么区别textVisiblePassword and text是 关于inputType在 EditText 上 根据文档 textVisiblePassword是 应该可见的密码文本 其中密码是无用的 密码文本 有
  • SQL 查询最流行的组合

    假设我有一个带有采购表的杂货店应用程序 customerId int itemId int 四位顾客走进店里 Bob buys a banana lemonade and a cookie Kevin buys a banana lemon
  • Javascript 特征模式资源

    有人可以推荐在 javascript 中使用 Trait 的好资源吗 经过一番搜索后 我主要找到有关提供特征功能的库的文章 但我很好奇如何在没有库的情况下实现特征的最佳实践 我在 SO 上看到这篇文章 还有其他方法吗 JavaScript
  • 使用 DataSnap 进行大流处理

    我试图在 DataSnap 服务器 客户端之间传输一些大流 1Mb 但无济于事 我试图理解吉姆 蒂尔尼的代码 http blogs embarcadero com jimtierney 2009 04 06 31461 运气不好 我什至无法