Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Виртуализация данных, именно ДАННЫХ, а не контейнеров 
:(
    Опции темы
San4o_Pan4o
Дата 30.3.2009, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Привет всем! Вот тут появилась интересная и безусловно полезная статья http://www.codeproject.com/KB/WPF/WpfDataVirtualization.aspx , только я не уверен, что все понял правильно. В смысле я не могу привязать к этому свою ObservableCollection фоток.. Думаю есть люди, которым это интересно и более опытные, чем я, и с удовольствием прокомментируют материалsmile
PM MAIL   Вверх
Partizan
Дата 30.3.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



San4o_Pan4o, ничего сверхординарного в статье нет...AsyncVirtualizingCollection<T> у него по сути и есть тот же ObservableCollection, но с виртуализацией smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
San4o_Pan4o
Дата 30.3.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Хорошо, пусть так. Не подскажешь, как тогда в этом примере вместо тестового тупого набора данных, подсунуть свою коллекцию? Чё-то у меня не вышло..
PM MAIL   Вверх
San4o_Pan4o
Дата 2.4.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



До сих пор не вышло(..
PM MAIL   Вверх
xxxSeVa
Дата 2.4.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



Опиши более подробно задачу.Откуда ты загружаешь изображения и в каком виде?
PM MAIL   Вверх
San4o_Pan4o
Дата 3.4.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Вроде заработало, но че-то не особо памяти меньше стало юзаться по сравнению с тем, как было до этого.. Вот что я делаю.
Есть класс 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>.
Больше ничего не менял, так работает, но выгоды в памяти не увидел  smile ... Может я что-то не так сделал и можно оптимизировать? Буду рад помощи.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.