Файлы PDB для производственного приложения и флага “Optimize code”

(обновление Swift 4) Чтобы ответить на исходный вопрос напрямую, вот быстрый эквивалент опубликованного фрагмента Objective-C.

let url = URL(string: image.url)
let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
imageView.image = UIImage(data: data!)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:

важно отметить, что метод Data(contentsOf:) будет загружать содержимое URL синхронно в том же потоке, который выполняется кодом, поэтому не вызывайте его в основном потоке вашего приложения.

Простым способом для того, чтобы один и тот же код выполнялся асинхронно, а не для блокировки пользовательского интерфейса, - это использование GCD:

let url = URL(string: image.url)

DispatchQueue.global().async {
    let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
    DispatchQueue.main.async {
        imageView.image = UIImage(data: data!)
    }
}

При этом в реальных приложениях, если вы хотите иметь лучший пользовательский интерфейс и избегать нескольких загрузок то же изображение, вы можете захотеть также, чтобы они не только загружались, но и кэшировались. Там уже довольно много библиотек, которые делают это очень бесшовно, и все они очень просты в использовании. Я лично рекомендую Kingfisher :

import Kingfisher

let url = URL(string: "url_of_your_image")
// this downloads the image asynchronously if it's not cached yet
imageView.kf.setImage(with: url) 

И это все

16
задан Sid M 14 July 2014 в 09:38
поделиться

3 ответа

Когда Вы захотите видеть исходные имена файлов и номера строки в Вашем stacktraces, генерируйте PDBs использование pdb-единственной опции. Оптимизация является отдельной от поколения PDB, т.е. можно оптимизировать , и генерируют PDBs без хита производительности.

От Ссылка Языка C#

, Если Вы используете/debug:full, знать, что существует некоторое влияние на скорость и размер оптимизированного кода JIT и маленькое влияние на качество кода с/debug:full. Мы рекомендуем/debug:pdbonly или никакой PDB для генерации кода выпуска.

19
ответ дан 30 November 2019 в 16:37
поделиться

Для ответа на первый вопрос только необходимо включать PDBs для производственного выпуска при необходимости в номерах строки для отчетов об исключении.

Для ответа на второй вопрос, с помощью флага "Optimise" с PDBs означает, что любой стек "коллапс" будет отражен в отслеживании стека . Я не уверен, может ли фактический номер строки, о котором сообщают, быть неправильным - этому нужно больше расследования.

Для ответа на третий вопрос у Вас может быть лучший из обоих миров с довольно аккуратным приемом. Существенные различия между отладочной сборкой по умолчанию и сборкой конечных версий по умолчанию - то, что при выполнении сборки конечных версий по умолчанию, оптимизация включена, и отладочные символы не испускаются. Так, на четырех шагах:

  1. Изменение Ваша конфигурация выпуска для испускания отладочных символов. Это не имеет фактически никакого эффекта на производительность Вашего приложения и очень полезно если (когда?) необходимо отладить сборку конечных версий приложения.

  2. Компиляция с помощью новой конфигурации сборки конечных версий, т.е. с отладочные символы и с оптимизация. Обратите внимание, что 99% оптимизации кода сделаны JIT-компилятором, не языковым компилятором.

  3. Создают текстовый файл в папке Вашего приложения под названием xxxx.exe.ini (или dll или безотносительно), где xxxx является названием Вашего исполняемого файла. Этот текстовый файл должен первоначально быть похожим:

    [.NET Framework Debugging Control]
    GenerateTrackingInfo=0
    AllowOptimize=1
    
  4. С этими настройками, Вашим выполнением приложения в полной скорости. Когда Вы захотите отладить свое приложение путем включения отслеживания отладки и возможно выключения (CIL) оптимизация кода, просто используйте следующие настройки:

    [.NET Framework Debugging Control]
    GenerateTrackingInfo=1
    AllowOptimize=0 
    

РЕДАКТИРОВАНИЕ Согласно комментарию cateye, это может также работать в размещенной среде , такой как ASP.NET.

16
ответ дан 30 November 2019 в 16:37
поделиться

Нет никакой потребности включать их в Ваше распределение, но необходимо определенно создавать их и сохранять их. Иначе отладка дампа катастрофического отказа практически невозможна.

я также включил бы оптимизацию. Пока это действительно делает отладку более трудной, увеличение производительности обычно очень нетривиально в зависимости от природы приложения. Мы легко видим по 10x производительность на выпуске по сравнению со сборками отладки для некоторых алгоритмов.

3
ответ дан 30 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: