我有一個使用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