我正在开发一个在内存中有大对象图的项目。域对象实际上是“宽”的,并且包含通常无关的整个数据量。我正在考虑实现某种延迟加载模型。
我目前正在考虑在每个懒惰的属性上拥有属性。我在应用程序启动时构建动态代理类型,然后发送它们。然后,这些将在必要时查找本地扩展属性服务。
有没有人在.Net之前做过类似的事情,干净的实现?感谢
答案 0 :(得分:1)
在这种情况下,构建器模式实际上非常有效。将无关的东西推迟到延迟加载,并将这些无关属性的实际加载和构造转移到构建器类。
答案 1 :(得分:1)
此外,您可以考虑将WeakReference与延迟加载结合使用。这将使您免于OutOfMemoryException。
答案 2 :(得分:1)
这取决于对象图和使用模式的特征。延迟加载代理方法是可靠的,但不能很好地扩展。客户端为大量对象请求相同属性的使用模式很快就会导致远程服务器出现性能问题,因为远程调用次数很多。
将对象图保存在服务器的内存中,并允许客户端批量加载属性数据,使用延迟加载代理作为后备工作对我们来说效果更好。
批量加载还允许对具有重复的不可变值的结果流进行大小优化。