问题标签 [lazy-loading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Asp.Net MVC - Rob Conery 的 LazyList - Count() 或 Count
我正在尝试为客户的订单日志创建一个 html 表。客户被定义为(我遗漏了很多东西):
LazyList 在获取客户时设置:
订单日志模型:
我在加载客户后传递了客户。订单。现在我正在尝试制作的日志看起来像:
哪个工作正常。但问题是评估 ViewData.Model.Orders.Count() 从字面上看需要大约 10 分钟。
我已经尝试使用 ViewData.Model.Orders.Count 属性,结果是相同的 - 需要永远。
我还尝试直接从视图中调用 _repository.GetOrders().ByCustomerID(custID).Count() 并且在几毫秒内完美执行。
任何人都可以看到为什么使用 LazyList 进行简单计数需要这么长时间吗?在获得简单计数时,它似乎试图遍历列表。
nhibernate - 使用 property-ref 映射到非键字段时,延迟加载不适用于多对一关系
我有一个使用 NHibernate 映射的遗留数据库。关注的对象是一个 Account 和一个 Notification 对象列表。对象看起来像:
映射文件如下所示:
但是,当我创建一个标准时,例如
我得到一个 Select N+1 案例,其中每个帐户都被加载,即使该帐户从未被引用。当多对一映射为惰性代理时,为什么所有帐户都被加载?
.net - lazy="false" 对 NHibernate 映射的类元素有什么影响?
我正在使用我正在尝试添加 NHibernate 的遗留系统。我有一个需要映射到表的类,但它有很多不是虚拟的现有方法。
我发现如果我将映射文件的类元素上的“lazy”属性设置为“false”,即使存在非虚拟方法,我也可以让 NHibernate 成功加载映射。我想知道这会对我在此类中使用 NHibernate 产生什么影响。
我了解对属于对象的集合进行非延迟加载的含义,但我不清楚对类进行延迟加载或急切加载的含义。这是否意味着属于该对象的所有集合都将被预先加载?或者这是否意味着 NHibernate 不再使用动态代理来代替实际的类?还有什么?
另外,这里最好的做法是什么?设置该 lazy=false 值是不可取的吗?我应该创建一个类实现的接口,然后将其映射到表吗?还是我应该硬着头皮把所有现有的方法都标记在虚拟类上?
提前感谢您的任何建议!
c# - 在深度不可变类型上进行延迟初始化是否需要锁?
如果我有一个非常不可变的类型(所有成员都是只读的,如果它们是引用类型成员,那么它们也指的是非常不可变的对象)。
我想在类型上实现一个惰性初始化属性,如下所示:
据我所知:
...是线程安全的。我不太担心两个线程都竞相同时初始化,因为这种情况很少见,从逻辑角度来看,两个结果都是相同的,如果我没有,我宁愿不使用锁到。
这行得通吗?优缺点都有什么?
编辑: 感谢您的回答。我可能会继续使用锁。然而,令我惊讶的是,没有人提出编译器意识到临时变量是不必要的,只是直接分配给 m_PropName 的可能性。如果是这种情况,那么读取线程可能会读取尚未完成构造的对象。编译器会阻止这种情况吗?
(答案似乎表明运行时不允许这种情况发生。)
编辑: 所以我决定采用受 Joe Duffy 的这篇文章启发的 Interlocked CompareExchange 方法。
基本上:
这应该确保在此对象实例上调用此方法的所有线程都将获得对同一对象的引用,因此 == 运算符将起作用。可能会浪费工作,这很好 - 它只是使它成为一个乐观的算法。
正如下面的一些评论所指出的,这取决于 .NET 2.0 内存模型的工作。否则,应将 m_PropName 声明为 volatile。
nhibernate - NHibernate 中的延迟加载
如果客户有许多附加到他们的订单。您将如何使用 NHibernate 延迟加载订单列表。
是不是需要设置映射文件?任何帮助或示例都会很棒。
database - 确定要获取的项目数
我正在编写一个惰性列表,以从具有给定条件和给定分页(起始索引和所需项目数)的数据库中检索项目。
在列表的实例化时,我计算映射表中的项目总数,这样我就有了列表的初始大小(initial,因为列表允许添加和删除项目)。
它几乎可以工作,但是在确定要获取的具体项目数量时我遇到了一些麻烦:实际上,我让用户指定给定的获取大小(例如10,在这个例子中)。
为了确定要获取的项目的确切数量,目前,我将获取大小因子添加到集合中项目的当前索引(从数据库表中检索的最后一个):如果结果小于或等于总计数,我没有做任何动作(并且提取工作非常清楚),但如果它大于总数,我计算剩余的要提取的项目失败。
实际上,为了计算剩余项目数,我从集合中的项目总数中减去当前索引+ 1(索引从零开始),这在所有情况下都不起作用。
你知道如何计算正确的因子吗?非常感谢各位!
apache-flex - 调用 getter 而不将其分配给任何东西(延迟加载)
我有一个可以使用延迟加载模式完全加载或延迟加载的 DTO。它的加载方式取决于 Flex 应用程序的需求。但是,此 DTO 将被发送到 Flex 应用程序 (swf)。通常,例如一个集合,只会在调用时加载。然而,在我的情况下,集合只会在 Flex 中调用,因此我在 .NET 端的实现显然在这种情况下不起作用(除非 Flex 会进行服务器调用......我想避免的事情)。
在集合的 getter 中,从数据库中检索数据。如果我将使用 ASP.NET 页面,它会起作用,但如果 DTO 被发送到 Flex,则不会。
你会如何处理这个问题?我可以在将 DTO 发送到 Flex 之前调用 getter,但这似乎很糟糕...... + 只有在将 getter 分配给某些东西时才能调用 getter(并且永远不会使用将保存集合的局部变量...... )。
c# - 使用 LINQ2SQL 进行延迟加载的最简单方法
我有一个只读数据库,所以我关闭了 ObjectTracking(因此隐式关闭了 DeferredLoading)。
我希望做延迟加载而不是使用 LoadWith<>。
在我需要数据本身之前,明确告诉 Linq 去惰性获取关系的最简单方法是什么。
例如:一个简单的 dbml
如果我有以下代码:
我知道我可以再次编写完整的查询,但我希望我们能一起找到更好的方法。
hibernate - 数据传输对象和事务服务方法
在通过 Hibernate 支持的事务服务方法传递数据时,是否有任何真正实用的方法可以避免使用 DTO?换句话说,DTO 是避免延迟初始化问题的唯一非 hacky 解决方案吗?
我认为 DTO 的两种流行替代方案以及我不太喜欢它们的原因是:
在视图模式中打开会话。这是我不喜欢的,因为我想让服务方法真正具有事务性(即,当方法退出时,Hibernate 会话被提交并关闭)。这主要是因为如果我以后需要将服务发布为 Web 服务,我不想担心事务。
通过服务方法而不是 DTO 传递域/业务对象,并急切地获取所需的属性/属性。这要好一些。然而,在具有复杂实体关系的非平凡领域对象层次结构中,急切的获取必须在某处停止。当它发生时,我看不出这不会很快变成一个完整的hackaton,用整个地方的引用ID替换实体。
从可维护性的角度来看,我是否遗漏了什么或者 DTO 实际上是唯一可靠的方法?
c# - c# Ajax 延迟加载
我需要在一个 aspx 页面上填充 4 个 GridView,但我只在页面加载时将一个数据表绑定到其中一个。我需要在页面加载后填充其他 3 个。
有谁知道使用 ajax 的最佳方法?
目前我在一个按钮上使用 javascript 来 __doPostBack,它 pupulates 3 GridViews 但不幸的是,即使使用更新面板,这也会强制加载整个页面。我需要加载页面,然后在返回数据表时填充 GridView。
任何建议将不胜感激。