"Привет! Есть вопрос один рядом с программированием. Я поддерживаю прогу одну, ранее участвовал в ее разработке. Обычно запускали ее на полноценных ноутах и разницы с настольным компом не видели. А вот сейчас запустили ее на мини-ноуте и работает в два раза медленнее. На мини ноуте проц стоит Atom x5-z8350? памяти 4Гб. графика не знаю какая, система 10-ка домашняя 64разряда. Обычно мы работали на Core i5 4570 или старше, оперативки 16Гб, система 7-ка профессиональная. Программа использует .net При запуске программы на мини ноуте проц нагружается процентов на 10, память - суммарно со всеми службами - процентов на 50. Собственно вопрос - как выяснить, где узкое место? Проц/память/графика/система/платформа/все вместе? Никогда просто этим не занимался - и попал в тупик."
Алгоритм маляра - одна из ПЕРВЫХ причин:
http://russian.joelonsoftware.com/Articles/BacktoBasics.html
По моему скромному мнению - в алгоритме маляра" наблюдается 80% проблем.
Вторая проблема - фрагментированность памяти. "Давить аллокации" - как писал мой друг Максим Лапшин.
Третья проблема - неудачная сортировка в контейнерах. Возможно надо использовать дихотомию (бинарную сортировку) вместо сортировки "пузырьком" (на контейнерах больше 1000 элементов, если верить Кнуту). Ну или использовать "мапы" вместо "векторов".
Ну и как советут Степанов - "сначала набираем данные, потом их фильтруем, , потом трансформируем, потом опять фильтруем, потом сортируем, потом ищем".
Add, Reduce, Map, Reduce, Sort, Find.
Array
.join> [ 1 2 3 "a" ]
.join> [ 3 2 1 "b" ]
.removeDuplicates>
.filter> .ItemIsInteger
.map> .ToString
.filter> .ItemNot "1"
.sort> .AsText
.find> "2"
Четвёртая проблема - работа с файлами, вместо работы с файлами. Кеширование - наше всё.
Пятая проблема связана со второй. "Множество мелких и короткоживущих объектов". Которые часто распределяются. Тут нам поможет шаблон LightWeight:
https://ru.m.wikipedia.org/wiki/Приспособленец_(шаблон_проектирования)
Ну и с этим же связана проблема выделения Mutable и Immutable объектов.
Ну и всяческие "фабрики" и "кеши".
Кешируемые Immutable объекты - "это хорошо".
Опять же - "давить аллокации".
http://www.gamedev.ru/code/forum/?id=205093&page=2
Навскидку - всё.
Ну и профайлер надо конечно использовать.
Больше проблем на своём опыте - я не встречал.
Алгоритм маляра - одна из ПЕРВЫХ причин:
http://russian.joelonsoftware.com/Articles/BacktoBasics.html
По моему скромному мнению - в алгоритме маляра" наблюдается 80% проблем.
Вторая проблема - фрагментированность памяти. "Давить аллокации" - как писал мой друг Максим Лапшин.
Третья проблема - неудачная сортировка в контейнерах. Возможно надо использовать дихотомию (бинарную сортировку) вместо сортировки "пузырьком" (на контейнерах больше 1000 элементов, если верить Кнуту). Ну или использовать "мапы" вместо "векторов".
Ну и как советут Степанов - "сначала набираем данные, потом их фильтруем, , потом трансформируем, потом опять фильтруем, потом сортируем, потом ищем".
Add, Reduce, Map, Reduce, Sort, Find.
Array
.join> [ 1 2 3 "a" ]
.join> [ 3 2 1 "b" ]
.removeDuplicates>
.filter> .ItemIsInteger
.map> .ToString
.filter> .ItemNot "1"
.sort> .AsText
.find> "2"
Четвёртая проблема - работа с файлами, вместо работы с файлами. Кеширование - наше всё.
Пятая проблема связана со второй. "Множество мелких и короткоживущих объектов". Которые часто распределяются. Тут нам поможет шаблон LightWeight:
https://ru.m.wikipedia.org/wiki/Приспособленец_(шаблон_проектирования)
Ну и с этим же связана проблема выделения Mutable и Immutable объектов.
Ну и всяческие "фабрики" и "кеши".
Кешируемые Immutable объекты - "это хорошо".
Опять же - "давить аллокации".
http://www.gamedev.ru/code/forum/?id=205093&page=2
Навскидку - всё.
Ну и профайлер надо конечно использовать.
Больше проблем на своём опыте - я не встречал.
я бы на атом грешил, то ещё гавно
ОтветитьУдалитьАга, может в мощность одного ядра упирается, надо распараллелить.
Удалить