序列化WCF服务的数组切片
本文关键字:数组 切片 服务 WCF 序列化 | 更新日期: 2023-09-27 18:22:23
我正在向WCF服务发送和从WCF服务接收大型对象数组。我将数组分成块并发送,这样每个调用就不会太大。
代码看起来像这样:
//split data up so there is no "400 - Bad Request" error
int length = 2000;
if (requests.Length > length)
{
CustomerMatching[] array = new CustomerMatching[length];
for (int first = 0; first < requests.Length; first += length)
{
if (first + length >= requests.Length)
{
length = requests.Length - first;
array = new CustomerMatching[length];
}
Array.Copy(requests, first, array, 0, length);
r += client.RequestCustomerMatchings(array);
}
}
else
{
//Should be able to stream the whole dataset in one go
r = client.RequestCustomerMatchings(requests);
}
这很好,但比一次性发送要慢得多,我怀疑必须复制整个数组才能发送它没有帮助。
我可以通过WCF一次发送一个数组切片而不复制每个块吗
您说过这个解决方案比一次性发送整个东西慢得多,但原因可能有很多。例如,您依次发送所有块。根据服务的逻辑,这可能太慢了。
可以考虑并行发送请求。这样,您的总体延迟应该会减少(但可能不会像单个请求那么小),并且避免使用大的内存缓冲区,这对.net来说可能更难处理。
假设Requests.Length与Length相比不是太大(比方说,10-10000次),我非常怀疑复制数组是否是您的瓶颈。
如果返回的结果不是大得离谱[1TB],理想情况下应该在一次调用中完成,但您应该特别修改您的配置值maxArrayLength,如下所述以支持此功能:最大阵列长度配额
正如Ben建议的那样,您应该只返回请求的结果,跳过不必要的项目。