Выпуск по сравнению с временами отладочной сборки

Размещение моего ответа в соответствии с рекомендациями @martineau.

  1. Создайте библиотеку GIF, как показано здесь
  2. Выполните приведенный ниже код и дождитесь записи result.png на диск:
from PIL import Image
from platform import system
from ctypes import string_at, Structure, c_long as cl, c_ubyte, \
                   py_object, pointer, POINTER as PT, CFUNCTYPE, CDLL
import requests

class GIF_WHDR(Structure): _fields_ = \
   [("xdim", cl), ("ydim", cl), ("clrs", cl), ("bkgd", cl),
    ("tran", cl), ("intr", cl), ("mode", cl), ("frxd", cl), ("fryd", cl),
    ("frxo", cl), ("fryo", cl), ("time", cl), ("ifrm", cl), ("nfrm", cl),
    ("bptr", PT(c_ubyte)), ("cpal", PT(c_ubyte))]

def GIF_Load(lgif, file, size):
    def WriteFunc(d, w):
        list = d.contents.value
        if (len(list) == 0):
            list.append(Image.frombytes("L", (w[0].frxd, w[0].fryd),
                              string_at(w[0].bptr, w[0].frxd * w[0].fryd)))
            list[0].putpalette(string_at(w[0].cpal, w[0].clrs * 3))
    list = []
    lgif.GIF_Load(file, size,
                  CFUNCTYPE(None, PT(py_object), PT(GIF_WHDR))(WriteFunc),
                  None, pointer(py_object(list)), 0)
    return list

chunk = 32768
img = "wikipedia/commons/d/d3/Newtons_cradle_animation_book_2.gif"

lgif = CDLL(("%s.so", "%s.dll")[system() == "Windows"] % "./gif_load")

size = -1
file = b""
response = requests.get("https://upload.wikimedia.org/" + img, stream = True)
if response.status_code != 200:
    print('Error:', response.status_code)
else:
    while size < len(file):
        size = len(file)
        file += response.raw.read(chunk)
        list = GIF_Load(lgif, file, len(file))
        if (len(list) == 1):
            list[0].save("result.png")
            break
    print("Read %d bytes\n" % len(file))

Имейте в виду, что это только иллюстративный пример; он не поддерживает многие вещи, присутствующие в современных GIF-файлах, такие как чередование и прозрачность. Полностью совместимую версию см. В примере из [1].

5
задан Agnel Kurian 24 March 2009 в 15:17
поделиться

5 ответов

Ну, существует много переменных, которые могли влиять на вещи. Вот некоторые причины, Отладка могла быть быстрее:

  • Обычно Режим отладки делает намного меньше оптимизации, поскольку они могут испортить отображение между инструкциями и строками кода. Так, компилятор делает меньше работы там.
  • Даже если полная отладочная сборка медленнее, сборки Отладки происходят намного чаще и могут обычно использовать в своих интересах возрастающие сборки намного больше, чем Сборка конечных версий может. Так справедливо часто Отладочная сборка не должна делать почти такой работы, как Сборка конечных версий была бы.
13
ответ дан 18 December 2019 в 12:02
поделиться

В целом я ожидал бы, что отладочная сборка будет быстрее для создания, но медленнее работать и сборка конечных версий для занимания больше времени для создания, но конечный результат работал бы быстрее.

Это до выпуска buid, вероятно, имеющий более агрессивные оптимизации, и они могут interfer с debuggability. Кроме того, некоторые оптимизации более широкого масштаба действительно занимают много времени. Время для вставки отладочной информации в объектные файлы является достаточно маленьким, чтобы быть игнорируемым, вероятно, требуется меньше времени, чем чтение исходного кода от диска во-первых.

2
ответ дан 18 December 2019 в 12:02
поделиться

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

0
ответ дан 18 December 2019 в 12:02
поделиться

Сборки отладки обычно быстрее, потому что нет никакой сделанной оптимизации (который очень распространен в сборках конечных версий).

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

Основное различие между Отладкой и Выпуском - то, что Отладка предназначена для отладки (поэтому включает отладочную информацию), и Выпуск предназначен для выполнения быстрее, таким образом, Вы используете сильную оптимизацию

0
ответ дан 18 December 2019 в 12:02
поделиться

Сборки конечных версий основной причины будут быстрее, то, что компилятор делает большую оптимизацию на них. Например, это может развернуть циклы, удалить ненужные переменные и подставляемые функции. Оптимизация не является тривиальной задачей и берет большую вычислительную мощность, таким образом замедляя сборку.

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

0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

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