Что представляет собой хороший профиль памяти?
При разработке каких-либо настольных приложений существуют ли какие-либо общие правила относительно того, сколько памяти должно использовать приложение?
Для приложений с большим весом их можно легко понять или, по крайней мере, профилировать, например, Firefox или Google Chrome. Но для небольших утилит или бизнес-приложений, сколько допустимого объема памяти используется?
Я спросил, потому что я недавно столкнулся с компромиссом между использованием памяти и производительностью и задаюсь вопросом, есть ли общее мнение по этому поводу?
РЕДАКТИРОВАТЬ: Платформа Windows XP для пользователей с машиной, способной только для запуска многофункциональных интернет-приложений.
Моя конкретная проблема заключается в кэшировании большого количества изображений в памяти. Если возможно, я бы хотел иметь кэш моего приложения настолько, насколько позволяет память пользователя. Я сделал это так, чтобы приложение кешировало до определенного максимального предела с учетом нехватки памяти на данный момент.,
Но что будет хорошим числом? Как вы придумаете один? Вот о чем я спрашиваю.
3 ответа
На это нет абсолютного ответа. Это зависит от слишком многих переменных.
Вот некоторые компромиссы для рассмотрения:
- Для какого устройства / платформы вы разрабатываете?
- Ожидаете ли вы, что ваш пользователь будет использовать это программное обеспечение в качестве основного назначения для своего компьютера (например, может быть, вы разрабатываете какое-то серверное программное обеспечение)
- Кто является вашей целевой аудиторией, домашние пользователи? продвинутые пользователи?
- Вы делаете реалистичные ожидания относительно объема оперативной памяти, которую будет иметь пользователь?
- Принимаете ли вы во внимание, что пользователь будет использовать много других программ на этом компьютере?
Иногда можно съесть свой торт и съесть его тоже. Например, если вы читаете файл и записываете его обратно, вы можете прочитать его по частям вместо чтения всего файла в память, а затем записать его. В этом случае вы лучше используете память и не снижаете скорость.
Я бы порекомендовал использовать больше оперативной памяти, чтобы получить лучшую скорость, если нужно. Но только если требования к оперативной памяти реалистичны для вашей целевой аудитории. Например, если вы ожидаете, что домашний пользователь, имеющий 1 ГБ ОЗУ, будет использовать вашу программу, то не используйте 600 МБ ОЗУ самостоятельно.
Подумайте об использовании большего количества ОЗУ в этом случае, чтобы повысить скорость и оптимизировать другую часть кода, чтобы использовать меньше ОЗУ.
Редактировать:
О вашей конкретной ситуации кэширования изображений. Я думаю, что было бы лучше, если бы вы позволили пользователю установить объем кэширования, который он хотел бы выполнить в качестве опции. Таким образом, люди с большим количеством оперативной памяти могут увеличить ее для лучшей производительности, а люди с небольшим объемом оперативной памяти могут установить ее на низком уровне.
Это полностью зависит от вашей целевой платформы, которая является более или менее бизнес-решением. Чем больше памяти вам понадобится, тем меньше клиентов смогут использовать ваше программное обеспечение. Несколько вопросов: сколько памяти ваши клиенты (или потенциальные клиенты) установили на своих компьютерах? Какие другие приложения будут работать одновременно с вашим приложением? Предполагается, что ваше приложение работает исключительно (например, полноэкранная компьютерная игра), или утилита, которая должна работать в основном в фоновом режиме, или часто включаться в нее из других приложений?
Hear является одним из примеров опроса, показывающего распределение установленной оперативной памяти в системах людей, играющих в игры через Steam (источник: Valve - сводные данные опроса):
- Менее 96 Мб 0,01 %
- От 96 Мб до 127 Мб 0,01 %
- От 128 Мб до 255 Мб 0,21 %
- От 256 Мб до 511 Мб 5,33%
- 512 Мб до 999 Мб 19,81%
- 1 Гб до 1,49 Гб 30,16%
- 1,5 ГБ до 1,99 ГБ 6,10%
- 2,0 Гб 38,37 %
Вывод, который я могу сделать из подобного опроса в моем домене (компьютерные игры), заключается в том, что я вполне могу ожидать, что почти все наши пользователи имеют 512 МБ или более, а подавляющее большинство - 1 ГБ или более. Для компьютерной игры, которая должна работать исключительно, это означает, что рабочий набор около 400 МБ достаточно безопасен и практически никого не ограничит, и если он обеспечивает значительную добавленную стоимость для продукта, может иметь смысл иметь рабочий набор около 800 МБ.
Это зависит от вашего целевого оборудования ПК. Если ваше приложение использует слишком много памяти, оно будет работать медленно на страницах Windows. ТЕСТОВОЕ ЗАДАНИЕ! Попробуйте оба варианта в вашем компромиссе, и некоторые промежуточные, если это имеет смысл. Запустите тесты на типичной машине, которую будут использовать ваши пользователи, и откройте разумное количество других приложений. Так что для большинства людей это Outlook и, вероятно, экземпляр или два Internet Explorer (или почтовый клиент / браузер на ваш выбор). Я работаю в организации, где пользователи моего приложения также могут запускать некоторые другие пользовательские приложения, поэтому мы тестируем и те, которые работают. Мы обнаружили, что наше приложение использует слишком много памяти и делает переключение приложений мучительно медленным, поэтому мы немного замедлили работу нашего приложения, чтобы уменьшить использование памяти. Если вы заинтересованы, наше целевое оборудование изначально было 512 МБ, потому что это было то, что было у нашей стандартной стандартной рабочей станции. Несколько компьютеров пришлось обновить до 1 Гб из-за этого приложения. Сейчас мы немного сократили использование ОЗУ, но оно написано на VB .NET, и большая часть используемой памяти, по-видимому, является платформой. PerfMon говорит, что процесс использует около 200 МБ (пик), но управляемая куча составляет всего около 2 МБ!