我在带有CF3.5的PDA中有一个应用程序。我还在.NET3.5中编写了一个Web服务(WCF)。
有两个操作:
1)PDA向WS询问数据。 WS返回大约500KB的sdf(sql server CE文件)。沟通很好。大约5-10秒。
2)PDA绕过收集数据,有时返回电台并连接到WiFi。 PDA通过从WS运行简单的true-false函数来检查是否存在与WS的连接,以检查是否存在通信故障。 如果没有,PDA将其填充的sdf文件(700KB)发送给WS。从PDA调用WS函数,直到在WS中运行函数(这意味着数据已作为byte []发送到函数)的时间大约需要30-40秒!
为什么发送/接收有这么大的差异?我应该检查什么是错误配置?
感谢
答案 0 :(得分:0)
这只是猜测,但它可能是将文件序列化为base64编码字符串的行为,这需要花费时间。通话需要多长时间才能看到该服务是否可用?如果这不是30-40秒不一样,那么你知道这不是对服务的实际调用需要花费时间,但其他东西和序列化确实看起来似乎是这里的重要部分。
手动序列化文件需要多长时间(也许向导生成的代码在这里表现不佳)?我可能会检查一下,看看需要多长时间。我还会(通过Fiddler或类似的方式)确认电线上的内容和时间。
答案 1 :(得分:0)
这对我来说听起来像是序列化/ base64。您可能希望使用System.Diagnostics.Stopwatch来查看代码的哪些部分执行时间过长。由于WCF在CF中为代理生成源,因此您也可以对其进行检测。 如果您的瓶颈确实是序列化,您可能想要使用不同的东西,比如协议缓冲区(protobuf-net实现比WCF快得多,它解决了我前一段时间遇到的性能问题)。 您也可以尝试使用eqatec profiler,这对于CF来说不再是免费的,但会立即识别出瓶颈。
答案 2 :(得分:0)
行。它是通过在发送之前和发送文件之后对byte []执行gzip压缩来解决的。
谢谢大家的回答。