.net 在WCF服务中管理重复数据
我正在编写一个WCF服务,它接收来自不同客户端的大型消息。 每个消息都由一个对象图组成,其中许多内部对象可能是相同的。 我的服务将这些消息中的数据存储到内存中 我正在尽量减少服务的内存消耗。因此,我希望存储单个对象,而不是从网络接收的几个相同的对象(嵌套在对象图中) 我使用的是DataContractSerializer,所以首先想到的是使用选项.net 在WCF服务中管理重复数据,.net,wcf,datacontractserializer,.net,Wcf,Datacontractserializer,我正在编写一个WCF服务,它接收来自不同客户端的大型消息。 每个消息都由一个对象图组成,其中许多内部对象可能是相同的。 我的服务将这些消息中的数据存储到内存中 我正在尽量减少服务的内存消耗。因此,我希望存储单个对象,而不是从网络接收的几个相同的对象(嵌套在对象图中) 我使用的是DataContractSerializer,所以首先想到的是使用选项preserveObjectReferences,但是这种方法有一些缺点: 没有与其他技术的互操作性(如果这是唯一的问题,我可以接受) 序列化和反序列
preserveObjectReferences
,但是这种方法有一些缺点:
- 没有与其他技术的互操作性(如果这是唯一的问题,我可以接受)
- 序列化和反序列化过程运行较慢
- 当对象在不同的消息(可能来自不同的客户端)之间相同时,没有多大帮助。仅适用于同一消息中同一对象图上的对象
我的问题是:
- 有没有更好的方法来处理(并存储在内存中)WCF服务中的重复对象
- 有没有一个好的(高效的、通用的、开放的)缓存实现,我可以用它来代替重写
你知道你使用了太多内存还是过早优化了吗?@RalphWillgoss我知道我使用了太多内存。只要看看Process Explorer,我就能看到内存消耗在相对较短的时间内增长到数百兆字节。您需要将这些对象保留多久?@RalphWillgoss。这些对象描述复杂的客户端状态,并由客户端更新。客户端可以(间接地)添加此类对象并将其从服务中删除。我计划为这些对象添加一些过期时间,但它将在几天到几周之间。看起来有点过头了。我看不到MemoryCache的好处(在我的例子中,我不需要分布式缓存)。App Fabric Cache API也基于字符串键,而不是一般的可比较键(从文档中我可以看出),我希望避免将键转换为字符串。