Вроде заработало, но че-то не особо памяти меньше стало юзаться по сравнению с тем, как было до этого.. Вот что я делаю. Есть класс Photolist, определенный так:
| Код | public class PhotoList : ObservableCollection<Photo> { public PhotoList() { }
public PhotoList(string path) : this(new DirectoryInfo(path)) { }
public PhotoList(DirectoryInfo directory) { _directory = directory; Update(); }
public string Path { set { _directory = new DirectoryInfo(value); Update(); } get { return _directory.FullName; } }
public DirectoryInfo Directory { set { _directory = value; Update(); } get { return _directory; } }
private void Update() { foreach (FileInfo f in _directory.GetFiles("*.jpg")) { Add(new Photo(f.FullName)); } }
DirectoryInfo _directory; }
|
Ну вот еще класс Photo, экземплярами которого я Photolist заполняю:
| Код | public class Photo { public Photo(string path) { _source = path; _name = path.Substring(path.LastIndexOf("\\") + 1); _fullpath = path; }
public override string ToString() { return Source; }
private string _source; public string Source { get { return _source; } } //my private string _name; public string FileName { get { return _name; } } private string _fullpath; public string FullPath { get { return _fullpath; } } //
}
|
Далее, из решения, лежащего по ссылке выше взял класс DemoCustomerProvider и переделал только в одном месте, в методе FetchRange:
| Код | public IList<Photo> FetchRange(int startIndex, int count) { Trace.WriteLine("FetchRange: " + startIndex + "," + count); Thread.Sleep(_fetchDelay); List<Photo> list = new List<Photo>(); for (int i = startIndex; i < startIndex + count; i++) { if (i >= _photos.Count) break; list.Add(_photos[i]); } return list; }
|
где _photos - это та самая ObservableCollection<Photo>. Ее я передаю в конструктор класса, в котором реализуется интерфейс IItemsProvider<Photo>. Больше ничего не менял, так работает, но выгоды в памяти не увидел ... Может я что-то не так сделал и можно оптимизировать? Буду рад помощи. |