Время выполнения label_image.py
также включает загрузку модели классификации, ее десериализацию и загрузку вашего изображения. В производственной среде вам нужна система очередей сообщений, из которой ваш сценарий классификации будет читать и записывать. Вы можете создать его с помощью Redis. Этот конвейер уменьшит накладные расходы ввода-вывода, и у вас будет разумное время классификации. Вы можете увидеть пример здесь
Струны до испытывают недостаток в следующих аспектах своих дубликатов C++:
Другое соображение состоит в том, кто будет поддерживать Ваш код? Что относительно за два года? Тот человек будет так же доволен строками C-stlye, как Вы? Поскольку STL становится более сформировавшимся, кажется, что люди будут все больше более довольны со строками STL, чем со строками C-стиля.
Струны до, как много других аспектов C, дают Вам много комнаты для зависания себя. Они просты и быстры, но небезопасны в ситуации, где предположения, такие как пустой разделитель могут быть нарушены или введены, может превысить буфер. Чтобы сделать их надежно, необходимо наблюдать справедливо hygenic кодирование методов.
Раньше было высказывание, что каноническое определение высокоуровневого языка было "чем-либо с лучшей строковой обработкой, чем C".
Этот вопрос не, действительно имеют ответ.
Если Вы пишущий в C, что по опциям Вы имеете?
Если Вы пишущий в C++, почему Вы спрашиваете? Что причина не состоит в том, чтобы использовать примитивы C++?
Единственная причина я могу думать: Соединение C и код C++ и имеют символ * где-нибудь в интерфейсах. Это иногда просто простой в использовании символ * вместо этого выполнение преобразования назад и вперед все время (особенно, если это - действительно 'хороший' код C++, которые имеют 3 различных строковых типа объектов C++).
По моему скромному мнению, самая твердая точка cstrings является управлением памятью, потому что необходимо быть тщательно, если необходимо передать копию cstring или если можно передать литерал функции, т.е. будет функция освобождать переданную строку, или будет это сохранять ссылку дольше затем для вызова функции. То же относится к возвращаемым значениям cstring.
Таким образом без большого усилия не возможно совместно использовать копии cstring. Это заканчивается во многих случаях ненужными копиями того же cstring в памяти.
струны до имеют возможности для неправильного употребления, вследствие того, что тот должен просканировать строку для определения, где это заканчивается.
strlen - для нахождения длины просканируйте строку, пока Вы не поражаете NUL, или доступ защитил память
strcat - должен просканировать для нахождения NUL, для определения, где начать конкатенировать. Нет никакого знания в струне до, чтобы сказать, будет ли переполнение буфера или нет.
струны до опасны, но обычно быстрее, чем строковые объекты.
Я думаю, что IT должен ХОРОШО использовать их, people've использование их в течение многих лет. Но я использовал бы станд.:: представьте в виде строки, если возможный, потому что 1) Вы не должны быть настолько осторожными каждый раз и можете думать о проблемах своего домена, вместо того, чтобы думать, что необходимо добавить другой параметр каждый раз... управление памятью и такой материал... просто более безопасно кодировать на более высоком уровне... 2) существуют, вероятно, некоторые другие небольшие проблемы, которые не являются грандиозным предприятием, но все еще... как люди, уже упомянутые... кодирование, unicode... все они "связанный" вид людей материала, создающих станд.:: строковая мысль... :)
Обновление
Я работал над проектом в течение половины года. Так или иначе я был достаточно глуп никогда не скомпилировать в режиме выпуска перед доставкой.... :) Хорошо... к счастью была всего одна ошибка, которую я нашел после 3 часов. Это было переполнение буфера очень простой строки.
В Вашем конкретном случае это не струна до, настолько опасная, так как чтение неопределенного объема данных в буфер фиксированного размера. Никогда не используйте добирается (символ*), например.
Смотрение на Ваш пример, хотя, это не кажется вообще корректным - пробует это:
char buffer[1024];
char * line = NULL;
while ((line = fgets(buffer, sizeof(buffer), fp)) != NULL) {
// parse one line of command output here.
}
Это - совершенно безопасное использование струн до, хотя необходимо будет иметь дело с возможностью это line
не содержит всю строку, но был довольно усеченным к 1 023 символам (плюс пустой разделитель).
Никакая поддержка Unicode не является причиной достаточно в эти дни...
Ну, для комментария определенного примера Вы не знаете, что данные, возвращенные Вашим вызовом к df, впишутся в Ваш буфер. Никогда не доверяйте входу un-sanatized в свое приложение, даже когда это, предположительно, из известного источника как df.
Например, если программа, названная 'df', помещается куда-нибудь в Вашем пути поиска так, чтобы это было выполнено вместо системы df, это могло использоваться для использования ограничения буфера. Или если df заменяется вредоносной программой.
Когда вход чтения из файла использует функцию, которая позволяет Вам указать максимальное количество байтов для чтения. Под OSX и Linux fgets () на самом деле определяется как char *fgets(char *s, int size, FILE *stream);
таким образом, было бы безопасно использовать в тех системах.
Можно знать, что сегодня 1 024 байтов достаточно для содержания любого входа, но Вы не знаете, как вещи изменятся завтра или в следующем году.
Если преждевременная оптимизация является корнем всего зла, магические числа являются основой.
Нет никакого способа встроить символы NUL (при необходимости в них для чего-то) в строки стиля C.
Управление памятью и т.д. должно было вырастить строку (массив символов), при необходимости, является довольно скучным для переосмысления.
Наличие длины, доступной в постоянно-разовом, является серьезными издержками во многих приложениях.
Существует несколько недостатков к струнам до:
Проблемы кодировки символов имеют тенденцию появляться, когда у Вас есть массив байтов вместо строки символов.