gpt4 book ai didi

wcf - 强制 WCF 在反序列化期间使用现有缓冲区?

转载 作者:行者123 更新时间:2023-12-04 19:33:35 27 4
gpt4 key购买 nike

我也在这里寻找其他一些主题,但我还没有找到解决我的问题的方法。

想象一下:
我有一个非常简单的 ServiceContract 和不同的 OperationContracts。其中一个 OperationContracts 是一个简单的用例“下载数据传输对象”。

服务看起来像:

...
[OperationContract]
DTO Download(strind Id)
...

类 DTO 看起来像:

[DataContract]
public class DTO
{
[DataMember]
public string Id;

[DataMember]
public byte[] Data;
}

当然很简单也很好用,但是我需要自己分配DTO中的byte[]!

我的代码是框架组件的一部分,它在大量内存限制下并行工作。我不希望 WCF 分配所有 byte[] 并且我不希望 ManagedHeap 再次取消分配它们。我需要共享和重用所有并行的现有缓冲区。

因此,当我完成序列化后,我将在服务器端重用缓冲区。在客户端,我希望 WCF 读入我的缓冲区!

我用自己的 XmlObjectSerialiers 和自己的 OperationBehaviors 尝试了一些解决方案,但还没有奏效。

还有人有其他想法吗?

最佳答案

更新:

我找到了第一个使用自己的 Serializer:XmlObjectSerializer、自己的 IContractBehavior 和自己的 DataContractSerializerOperationBehavior 的可行解决方案。

在反序列化期间从 XmlDictionaryReader 读取时,我使用以下代码片段:

public bool DeserializeFrom(XmlDictionaryReader source)
{
...
readBytes = source.ReadElementContentAsBase64(MyOwnAlreadyAllocatedBuffer, offset, toRead);
...
}

这有效,但它仍然比 DataContractSerializer 慢一点。

还有其他选择吗?

注意:我只想传输已经二进制序列化的数据!

关于wcf - 强制 WCF 在反序列化期间使用现有缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com