Все режимы "Четвертичного периода " работают .
Код: Выделить всё
Тест загрузки списка 4
Кэширование ОТКЛ
Однопоточный режим
Net mode
Время 32,58 c
Тест загрузки списка 4
Кэширование ВКЛ
Однопоточный режим
Net mode
Время 13,25 c i 29 c 30
Время 13,26 c
Тест загрузки списка 4
Кэширование ВКЛ
Однопоточный режим
File mode
Время 2,61 c
Тест загрузки списка 4
Кэширование ВКЛ
MT Mode
Запуск загрузки...
Поток 1048 завершает работу
C 6
Обработка 6 загруженных изображений...
Поток 388 завершает работу
C 9
Обработка 9 загруженных изображений...
Поток 3708 завершает работу
C 7
Обработка 7 загруженных изображений...
Поток 7248 завершает работу
C 7
Обработка 7 загруженных изображений...
Время 5,64 c
Тест загрузки списка 4
Кэширование ОТКЛ
MT Mode
Запуск загрузки...
Поток 6024 завершает работу
C 13
Обработка 13 загруженных изображений...
Поток 6204 завершает работу
C 0
Поток 6908 завершает работу
C 1
Обработка 1 загруженных изображений...
Время 27,30 c
Режим "Без кэширования" это ультимативная "без компромиссная" загрузка из интернета .
"File mode" ультимативное отсутствие интернета (на самом деле просто отладчик процедуры OneDraw )
И все бы ничего но "третья версия" быстрее и стабильнее...
Код: Выделить всё
Тест загрузки списка 3
Кэширование ОТКЛ
Фаза 0 Однопоточный режим
Время 15,41 c
Фаза 1
Время 24,72 c
Фаза 2
Время 27,33 c
Тест загрузки списка 3
Кэширование ВКЛ
Фаза 0 Однопоточный режим
Время 11,10 c
Фаза 1
Время 11,41 c
Фаза 2
Время 14,00 c
Тест загрузки списка 3
Кэширование ОТКЛ
Фаза 0 MT Mode
Лог запуска по частям
9 10
18 10
27 10
Время 11,02 c
Фаза 1 MT Mode
Лог
9 10
18 10
27 10
Время 18,47 c
Фаза 2 MT Mode
Лог
9 10
18 9
27 9
Время 20,62 c
Тест загрузки списка 3
Кэширование ВКЛ
Фаза 0 MT Mode
Лог запуска по частям
9 10
18 10
27 10
Время 0,74 c
Фаза 1 MT Mode
Лог
9 10
18 10
27 9
Время 0,91 c
Фаза 2 MT Mode
Лог
9 10
18 9
27 9
Время 3,02 c
В моей версии как обычно, для каждой загрузки выделяется отдельная нить + есть 3 фазы (получение размеров+выделение памяти , чтение в большой линейный массив МемориСтрим, обработка отрисовка )
+Есть дополнительная акселерация при увлечении количества запущенных нитей-потоков ( текущая версия программы держит на 4-ядерном процессоре примерно 90 нитей, но это уже не безопасно но 40-50 работают нормально ничего не тормозит )
Код: Выделить всё
Тест загрузки списка 3
Кэширование ОТКЛ
Фаза 0 MT Mode
Лог запуска по частям
Время 10,94 c
Фаза 1 MT Mode
Лог
Время 14,68 c
Фаза 2 MT Mode
Лог
Время 16,67 c
Тест загрузки списка 3
Кэширование ВКЛ
Фаза 0 MT Mode
Лог запуска по частям
Время 0,47 c
Фаза 1 MT Mode
Лог
Время 0,59 c
Фаза 2 MT Mode
Лог
Время 2,54 c
В общем пока "вдавить педаль в пол" с помощью предложенного кода увы не получилось + есть трудно локализуемые нестабильности.
(Мой опыт говорит что чем меньше времени работает параллельная нить-поток тем меньше шанс словить "нелокальную нестабильность " + потоков может быть заметно большие чем ядер и "аппаратных вычислительных каналов " что удивительно это дает заметный выигрыш в скорости параллельной обработки ... расчет стабильного количества примерно "Число Ядер CPU" *10 )
.
ЗЫ
По моему идеальный метод загрузки подобных мозаичных-галерей был-бы при "ленивой загрузке по требованию" непосредственно при отрисовке видимых элементов с кэшированием и динамическим освобождением от всего лишнего .К сожалению реализация такого простого на первый взгляд способа постоянно оказывается неожиданно громоздкой .Так что приходится проявлять разнообразные "чудеса гибридизации".
Добавлено спустя 1 час 58 минут 59 секунд:
xchgeaxeax писал(а):и каждый поток загрузит примерно одинаковое количество байт с хорошим средним временем.
Кстати это мысль ! Можно просто грузить одинаковые блоки причем даже если файл меньшего или большого размера
(Просто процедура чтения должна "склеивать" блоки читая их из разных файлов)