管理WCF服务中的重复数据

时间:2012-12-16 07:46:52

标签: .net wcf datacontractserializer

我正在编写一个WCF服务,它接收来自不同客户端的大量消息。 这些消息中的每一个都包含一个对象图,其中许多内部对象可能是相同的。 我的服务将这些消息中的数据存储到内存中。

我正在尝试最小化服务的内存消耗。所以我想存储一个对象而不是从网络接收的几个相同的对象(嵌套在对象图中)。

我正在使用DataContractSerializer,所以首先要记住的是使用Object Graph Preservation选项preserveObjectReferences,但这种方法有一些缺点:

  • 没有与其他技术的互操作性(如果这是唯一的问题,我可以忍受它)。
  • 序列化和反序列化过程运行较慢。
  • 当不同的消息之间的对象相同时,可能来自不同的客户端时,它们没有多大帮助。仅适用于同一消息中同一对象图上的对象。

因此,我想到的下一件事就是使用某种缓存。 当我收到消息时,我可以遍历对象图,使用缓存为所有相同的对象查找单个实例,并使用此单个实例更新我的存储。当存储处理对该对象的所有引用时,可以从缓存中删除它并释放该对象的内存。

我可以使用MemoryCache但不幸的是我的密钥不是字符串,我不想将它们转换为字符串只是为了将它们存储在缓存中。 (当他们将ObjectCache限制为字符串键时,微软对自己有什么看法?)

因此,在重写具有弱引用和可与IEqualityComparer进行比较的键的Cache类之前,我想确保我在这里没有遗漏任何内容......


我的问题是:

  • 是否有更好的方法来处理(并在内存中存储)WCF服务中的重复对象?
  • 是否有一个好的(高效,通用,开放)缓存实现,我可以使用而不是重写一个?

1 个答案:

答案 0 :(得分:0)

您可以使用Microsoft App Fabric Server(Velocity)缓存,它非常适合部署WCF服务。

App Fabric Caching Features