我有一个使用MVVM方法的WPF应用程序。时间增加,更新每个刷新私人Observable集合
在我的一个视图模型中,我有一个私有的可观察集合,我将其设置为一个'new observableCollection',它是通过使用NHibernate的ISession对象通过存储库类获取数据的查询创建的。
我在我的viewmodel中有一个私有的可观察集合,我想用我的查询返回/创建的集合进行更新。
问题是,每次我调用我的方法来执行查询时,每次更新私有对象(ObservableCollection)所用的时间会较长。
我测试了查询在存储库中执行所花费的时间以及它仅有的4秒或5秒。我正在使用延迟加载检索4500条记录。
所以我的问题是,为什么每次我在viewmodel中调用我的刷新方法时,时间会增加?此外,我还应该补充说明,在任务管理器中显示的内存使用情况也增加了,所以它几乎看起来有内存泄漏?
代码下面的例子:
视图模型:
private static ObservableCollection<CustomerViewModel> _allCustomers;
Expression<Func<Customer, bool>> expression2 = p => p.IsVisible == 'T';
_allCustomers = new ObservableCollection<CustomerViewModel>(
from customer in ManyEntitiesRepository<Customer>.Instance.RetrieveAll(expression2)
select new CustomerViewModel(customer));
库检索
public virtual IList<T> RetrieveAll(Expression<Func<T, bool>> expression)
{
try
{
if (_allEntities != null)
{
foreach (T entity in _allEntities)
SessionProvider.Instance.GlobalSession.Evict(entity);
_allEntities.Clear();
}
_allEntities = (from c in SessionProvider.Instance.GlobalSession.Query<T>().AsExpandable()
where expression.Invoke(c)
select c).ToList<T>();
return _allEntities;
}
什么是'SessionProvider.Instance.GlobalSession.Evict(实体); '? – sll
'SessionProvider'是我的SessionProvider类的名称,它为应用程序的生命创建1个会话,它的私有设置使得它是一个单例,这是'实例'。全局会话是由NHibernate提供的一个'ISession'对象,用于跟踪生活在应用程序当前范围内的所有对象/实体。所以,当我调用上面的RetrieveAll函数时,我传递了我想查询的对象类型,在这种情况下,它是一个'Customer'类类型。在“客户”完成全面检索之前,我们需要驱逐(摆脱)全球会话 – Kev
中的当前客户。如果我们没有执行驱逐,那么我们会将客户数量增加一倍已存在的客户实体存在于globalSession – Kev