首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DataSnap的大流

使用DataSnap的大流
EN

Stack Overflow用户
提问于 2009-11-22 17:51:50
回答 1查看 3.3K关注 0票数 4

我试图在DataSnap服务器/客户端之间传输一些大流(~1Mb),但没有结果。我试图理解Jim (http://blogs.embarcadero.com/jimtierney/2009/04/06/31461)的代码,没有运气,而且我甚至无法编译代码,因为缺少一个库,无论如何.

我能接收到的流的最大大小是64k,所以任何提示/想法/代码示例(您可以为像我这样的周末程序员提供)都将受到非常欢迎。谢谢!

我的服务器代码:

代码语言:javascript
复制
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;

我的客户端调用代码:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-22 19:32:19

实际上,我想我知道了。我发这篇文章是为了回答也许其他人需要这个。

代码语言:javascript
复制
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;

附注:

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1779409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档