Вопрос

У меня есть приложение target-c для OS X, которое сравнивает две базы данных sqlite и производит diff в формате json. БД довольно большие (10000 предметов со многими полями). Иногда это приложение запускается примерно за 55 секунд (используя 95% процессора). Иногда это занимает около 8 минут (используя 12% процессорного времени). Это с теми же БД. Когда он использует только небольшую часть процессора, остальное доступно. Похоже, что-то не имеет приоритет над процессом. Добавление " приятно -20 " по команде, кажется, чтобы убедиться, что я получаю использование процессора. Мои вопросы

<Ол>
  • Если больше ничего не использует процессор, почему мое приложение не использует в своих интересах это?

  • Есть ли что-то, что я могу сделать программно изменить это?

  • Что я могу сделать с OS X, чтобы изменить это?

  • Это было полезно?

    Решение

    Вопрос 1:

    Так как, я полагаю, вам нужно читать в базах данных с диска, вы не используете процессор в полной мере, потому что ваш код блокирует чтение диска. В Mac OS X в фоновом режиме выполняется множество программ, которые не используют много процессорного времени, но отправляют много операций чтения с диска, например Spotlight.

    Вопрос 2:

    Вероятно, нет, за исключением максимально эффективного использования доступа к диску.

    Вопрос 3:

    Завершите все другие процессы, которые обращаются к диску. Это включает в себя множество системных процессов, которые вы действительно не должны закрывать, поэтому я не думаю, что вы можете здесь что-то сделать, кроме как запустить его на Darwin без всяких изысков Mac OS X.

    Другие советы

    Звучит так, как будто вы долгое время связаны. Вы делаете что-нибудь еще на машине? Процессор сам не дросселирует - он определенно чего-то ждет.

    Вы можете использовать некоторые инструменты разработчика для просмотра своего приложения во время его работы - возможно, наиболее полезным будет «Инструменты», который представляет собой графический интерфейс поверх dtrace. Это должно быть установлено, если вы используете самый последний Xcode. Вы также можете использовать Shark, который несколько проще на первый взгляд, но менее информативен в долгосрочной перспективе.

    Обычно вы получаете всю доступную производительность. Если процессор не на 100%, это что-то блокирует. В случае баз данных это часто блокируется. Используйте Shark, чтобы узнать, что происходит в вашем приложении.

    Когда ваша программа использует мало ЦП, возможно, потому что она ожидает диска, особенно когда другие процессы одновременно обращаются к диску. Другая возможность - ваша программа использует слишком много памяти, а ОС начинает использовать пространство подкачки.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top