【问题标题】:Slow Delphi file stream over isapi datasnap httpsisapi datasnap https上的慢速Delphi文件流
【发布时间】:2015-09-22 12:43:20
【问题描述】:

我编写了一个 datasnap ISAPI 应用程序。我正在使用流将文件从客户端发送到服务器。问题是发送一个 3 MB 的 zip 文件大约需要 1 分钟。

我在客户端的代码如下所示

TBlobField(ClientDataSetTemp.FieldByName('FileData')).LoadFromFile('c:\test.zip');
ClientDataSetTemp.SaveToStream(MemoryStreamFileData);

在客户端我也试过这个

MemoryStreamFileData:= TFileStream.Create('c:\test.zip', fmShareDenyWrite);

我的服务器代码是这样的

TBlobField(qryTemp.FieldByName('FileData')).LoadFromStream(MemoryStreamFileData);

知道如何提高速度。谢谢。

【问题讨论】:

  • 当您运行分析器时,它会说时间花费在哪里?
  • 感谢 Rob 的回复。你在谈论sql profiler吗?如果是,那不是问题。所有时间都花在流到达服务器上。一旦到达服务器,数据将在几秒钟内得到处理。
  • 我不是特别在谈论 SQL 分析器,但数据库代码显然是您希望在分析中包含的内容。我说的是一个普通的代码分析器。

标签: delphi datasnap isapi


【解决方案1】:

TBlobField 使用继承自 Windows OLE BLOB 的 ActiveX PBlobObject。

从那里开始几乎有问题,只需检查“https://msdn.microsoft.com/en-us/library/windows/desktop/ms711511%28v=vs.85%29.aspx

可以使用 sql saveto 文件功能快速解决问题。

Exporting Blob from MySQL database to file with only SQL

【讨论】:

  • 感谢尤金的回复。我没有与 SQL Server 的直接连接。我正在使用 ISAPI。所以我想我不能使用SQL方式。
  • Ary,如果您能说出您使用的是什么连接器(ADO、dbExpress、另一个)和 sql server。我可以对你的问题给出更负责任的回答。例如 - 在 ZeosDBO Direct 驱动程序中有一些功能可以使用 delphi 流而不是 mssft、ado 和 dbExpress 有一些简单的 hack。你不是第一个遇到这个问题的人。 pss:嗯 1 更多提示.. 如果您使用 DataSource,请为文件创建另一个不使用 DataSource 的查询,因为 DataSource 会占用大量资源!
  • 尤金,我的 ISAPI 服务器有 ADOConnection 。但是暂时可以说我什至不想保存到 SQL Server 2008 R2 数据库。通过手动记录,我可以看到文件流到达服务器大约需要 1 分钟。
  • 好的...如何从 SQL 中获取数据?如果“SELECT TOP 1000 id,caption,blob,field1 FROM table ORDER BY id ASC”然后你下载整个数据的思想连接,它真的冻结了整个查询。没有指向 blob 的指针,您可以通过连接到内存获取所有数据,然后输出行。对于某些数据,您必须创建自定义查询,例如“SELECT TOP 1 blob FROM table WHERE id = :id”,并从主查询中提供数据。请参阅 TBlobField 源,没有指针,有整个数据,只是为自定义 TField 读取创建的类。该单个查询也可以缓存在客户端应用程序中。
  • 尤金。数据不是从 SQL 中获取的。这只是桌面上的文件设置,我想从客户端发送到服务器。
猜你喜欢
  • 2016-12-11
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多