gpt4 book ai didi

c# - memcached 的序列化

转载 作者:行者123 更新时间:2023-11-30 21:21:48 26 4
gpt4 key购买 nike

我有一个巨大的域对象(比如父对象),其中包含其他域对象。通过查询数据库来“创建”这个父对象需要花费很多时间(好的,我们正在优化数据库)。所以我们决定使用 memcached 缓存它(具体使用 northscale)

所以我检查了我的代码并将所有类(我认为)标记为 [Serializable],但是当我将它添加到缓存时,我看到我的 VS 中抛出了一个序列化异常.net 输出窗口。

var cache = new NorthScaleClient("MyBucket");
cache.Store(StoreMode.Set, key, value);

这是异常(exception)情况:

A first chance exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll

所以我的猜测是,我没有将所有类标记为 [Serializable]。我没有使用任何第三方库,并且可以将任何类标记为 [Serializable],但是当缓存尝试序列化对象时,我如何找出哪个类失败了?

Edit1:casperOne 评论让我思考。我能够使用 Microsoft Cache Application Block 缓存这些域对象而无需将它们标记为 [Serializable],但不能使用 NorthScale memcached。这让我觉得可能与他们的实现有关,但出于好奇,我仍然有兴趣找到在尝试将对象添加到 memcached 时失败的地方

最佳答案

BinaryFormatter 的一个常见遗漏是事件;如果您订阅了不可可序列化的对象,就会发生不好的事情。另外,您可能有意序列化订阅者。您可以将它们标记为 [NonSerialized][field:NonSerialized]

如果一切都失败了,给它你的对象的byte[](或者如果失败,base64)。也就是说,我建议不要在此处使用 BinaryFormatter - 它是 brittle并占用比需要更多的带宽。我使用 protobuf-net 取得了一些成功相反( see here ,但不同的实现);这是 smaller, faster , 和版本安全。我也许可以帮您解决这个问题?或者您可以使用来自 protobuf-net 的 ISerializable Hook 。

关于c# - memcached 的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2562485/

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