precompiled binaries что это
Precompiled binaries что это
← →
Конформист ( 2010-05-01 05:39 ) [1]
Просто Линукс стали использовать пользователи, а не только хакеры.
← →
boa_kaa © ( 2010-05-01 06:04 ) [2]
> adav84 (01.05.10 04:52)
«Я всегда говорила своему мужу: Джон, пока ты играл в бридж в мире что-то произошло» (с)
← →
Anatoly Podgoretsky © ( 2010-05-01 06:58 ) [3]
> adav84 (01.05.2010 04:52:00) [0]
Просто стало модным.
Раньше был страх, если дистрибутив был на байт больше, чем возможно.
> Раньше был страх
да какой страх, просто инет у большинства был действительно дерь. т.е. диалапным, было актуально, потому и «экономили» даже типа соревнования было «у кого меньше».
> sniknik (01.05.2010 08:52:04) [4]
Вот этот страх и был.
← →
Харакири ( 2010-05-01 09:28 ) [6]
Просто Линукс стали использовать пользователи, а не только хакеры.
← →
Anatoly Podgoretsky © ( 2010-05-01 09:36 ) [7]
← →
test © ( 2010-05-01 09:42 ) [8]
Не совсем конечно Linux, но описан процесс создания дистрибутива из бинарников.
Anatoly Podgoretsky © (01.05.10 09:36) [7]
А это тут причем?
← →
boa_kaa © ( 2010-05-01 11:56 ) [9]
> Anatoly Podgoretsky © (01.05.10 09:36) [7]
> А это тут причем?
при том, что истина
> Anatoly Podgoretsky © (01.05.10 09:36) [7]
>
> Windows must die
Ламер :))
а в чем аше проблема, скоро линупс превратится в ту же венду.. главное массы переходят на него..
← →
turbouser © ( 2010-05-01 12:48 ) [12]
← →
test © ( 2010-05-01 13:00 ) [13]
← →
turbouser © ( 2010-05-01 13:05 ) [14]
> test ©
Когда дезигнеры и программеры будут действовать сообща. Иначе.. Ну, в общем, то, что сейчас есть.
← →
turbouser © ( 2010-05-01 14:02 ) [16]
> silver © (01.05.10 13:34) [15]
> с дезигном в линуксах вроде нормально все
Нет. Юзабилити на 3 с минусом..
← →
test © ( 2010-05-01 14:07 ) [17]
turbouser © (01.05.10 14:02) [16]
Про какой из Линухов идет речь?
← →
turbouser © ( 2010-05-01 14:10 ) [18]
← →
@!!ex © ( 2010-05-01 14:10 ) [19]
> [17] test © (01.05.10 14:07)
> Про какой из Линухов идет речь?
Про любой.
← →
test © ( 2010-05-01 14:15 ) [20]
turbouser © (01.05.10 14:10) [18]
Мне KDE 4 нравиться, но на вкус на цвет..
@!!ex © (01.05.10 14:10) [19]
Тогда это true и false одновременно.
← →
@!!ex © ( 2010-05-01 17:24 ) [22]
> [20] test © (01.05.10 14:15)
> Мне KDE 4 нравиться, но на вкус на цвет..
Вопрос в юзабельности.
Отсутствие единых стандартов.
Отсутствие адекватной системы помощи(занятся чтоли и сделать самому?).
← →
test © ( 2010-05-01 17:49 ) [23]
@!!ex © (01.05.10 17:24) [22]
ИМХО спорить бесполезно, мне интерфейс от Win7 показался крайне не удобным, KDE + Dolphine оказалось то что меня полностью устраивает. Кстати справку по ним действительно не видел и не читал ))
← →
@!!ex © ( 2010-05-01 18:09 ) [24]
В Linux консоль всегда была основным средством работа и она действительно отлажена и выверена. К ней никаких претензий.
← →
test © ( 2010-05-01 18:31 ) [25]
@!!ex © (01.05.10 18:09) [24]
KDE == рабочий стол, меню пуск
Dolphine == Explorer
Причем тут консоль?
← →
Pavia © ( 2010-05-01 18:32 ) [26]
Консоль была в Unix и она опередила свое время. Разрабатывалась она в вузах. А поэтому основывалась на научном подходе раз и два на комерции. Так как Unix был коммерческой операционной системой то народ знал за что платит. Потом уже энтузиасты создали сообщество свободных и открытых исходников GNU переписав утилиты из Unix.
Я тут с роутером разбираюсь. Там стоит Линукс у-у-у-у столько по накрутили лишнего. Вместо привычных 1-2 команд каждая мне что-то да запрещает получается куча команд и куча файлов с настройками, которые нечерта ненужны
← →
Pavia © ( 2010-05-01 18:37 ) [27]
Во общем я к тому что в Linux консоль заимствована из Unix.
← →
Anatoly Podgoretsky © ( 2010-05-01 18:47 ) [28]
Что особого в консоли Линукс, кроме того что их несколько.
← →
test © ( 2010-05-01 21:12 ) [30]
SergeyIT © (01.05.10 21:09) [29]
У MS есть MSDN! Для партнеров он постоянно обновляется.
← →
SergeyIT © ( 2010-05-01 21:20 ) [31]
← →
test © ( 2010-05-01 21:32 ) [32]
SergeyIT © (01.05.10 21:20) [31]
В консоле нет, но справка в принципе есть.
← →
Anatoly Podgoretsky © ( 2010-05-01 21:47 ) [33]
> SergeyIT (01.05.2010 21:09:29) [29]
man это внешняя программа.
← →
Anatoly Podgoretsky © ( 2010-05-01 21:48 ) [34]
> SergeyIT (01.05.2010 21:20:31) [31]
А нафига она (гигантская, гипер справка нужна в консоли)?
← →
test © ( 2010-05-01 21:50 ) [35]
Anatoly Podgoretsky © (01.05.10 21:48) [33]
man таки утилита.
← →
Anatoly Podgoretsky © ( 2010-05-01 21:56 ) [36]
> test (01.05.2010 21:50:35) [35]
Утилита это ламерское название.
> А нафига она (гигантская, гипер справка нужна в консоли)?
А если Х-ов нет, где справку посмотреть?
← →
test © ( 2010-05-01 22:51 ) [38]
SergeyIT © (01.05.10 22:20) [37]
Позвонить в тех поддержку MS ))
← →
Anatoly Podgoretsky © ( 2010-05-01 23:44 ) [39]
> SergeyIT (01.05.2010 22:20:37) [37]
Так в виндоус иксов нет и проблем тоже.
А для непонятливых, MSDN есть и в online
← →
Игорь Шевченко © ( 2010-05-02 00:21 ) [40]
> Консоль была в Unix и она опередила свое время
консоль была до юникс, представь.
SQLite + C#
В данной статье рассмотрим работу с SQLite из программы на языке C#. Основное внимание будет уделено конфигурированию проекта в MS Visual Studio для работы с SQLite, созданию базы данных, созданию таблиц и работе с таблицами: чтение/запись данных.
Исходный код доступен на GitHub.
Введение в SQLite
Если кратко, то SQLite – это кроссплатформенная встраиваемая СУБД. Свойство кроссплатформенности я думаю пояснять не нужно, а вот с понятием “встраиваемая” наверное стоит немного разобраться. Существуют СУБД, которые представляют собой клиент-серверное приложение – это наиболее знакомый вариант. Например Microsoft SQL Server, MySQL, PostgreSQL, различные NoSQL варианты, которых на сегодняшний день появилось огромное количество. Суть их в том, что есть выделенное приложение – сервер, которое принимает запросы от клиентов и выполняет их, оно непосредственно занимается записью/чтением данных на диск и предоставляет различные функции типа репликации и т.п. Встраиваемая СУБД не имеет выделенного сервера, ее движок включается в приложение в виде библиотеки и предоставляет доступ к базе через специализированный API.
На сегодняшний день SQLite является одной из самых популярных решений такого типа. Она используется практически повсеместно: в embedded приложениях, мобильных телефонах, различных платформах и т.д. Например браузер Google Chrome использует SQLite для хранения Cookies. SQLite обладает феноменальной надежностью (зачастую в ущерб производительности, если её неправильно “готовить”), поэтому, несмотря на то, что она является открытой, разработчики практически не принимают сообщения об ошибках.
Сами разработчики рекомендуют брать во внимание следующие моменты при выборе дистрибутива SQLite:
Структура папки, в которой располагается приложение, для поддержки режима автоматической подгрузки нужных библиотек (Native Library Pre-Loading) представлена ниже
Работа с SQLite из C#
Создадим простое приложение, демонстрирующее работу с SQLite СУБД. В качестве среды разработки будем использовать Visual Studio 2015 Community Edition.
Подготовка
Первое, что мы сделаем, это скачаем с официального сайта пакеты Precompiled Binaries for 64-bit Windows (.NET Framework 4.0) и Precompiled Binaries for 32-bit Windows (.NET Framework 4.0). На момент написания статьи это была версия sqlite-netFx40-binary-x64-2010-1.0.101.0.zip и sqlite-netFx40-binary-Win32-2010-1.0.101.0.zip
В Visual Studio создадим проект Windows Forms Application с именем SQLiteSample.
После этого необходимо собрать проект, для того, чтобы IDE создала необходимый набор каталогов. В нашем случае интерес представляет \bin\Debug. В него добавим необходимый набор файлов, как показано выше в описании структуры папок при использовании подхода Native Library Pre-Loading.
Добавим в проект ссылку на библиотеку System.Data.SQLite.dll, предварительно скопировав ее в папку SQLiteSample\SQLiteSample\lib. Для этого на панели меню выбрать Project/Add Reference… В открывшемся окне нажать кнопку Browse… и выбрать файл System.Data.SQLite.dll. Что привет к появлению нового Reference в окне Solution Explorer.
Приложение будет представлять собой форму для работы с базой данных, содержащей имена писателей и названия их произведений. Внешний вид представлен на рисунке ниже.
На панели инструментов имеются несколько кнопок:
В строке состояния отображается статус:
Создание базы данных, таблиц и работа с данными
Сейчас более подробно рассмотрим процессы создания базы данных, таблиц и работы с записями таблицы (чтение и добавление). Каждая из этих задач будет решаться в рамках метода, вызываемого при нажатии на соответствующую кнопку.
Предварительно подключим в нашем проекте пространство имен System.Data.SQLite и добавим переменные для связи с базой данных. Таким образом наша программа будет иметь вид.
Создание БД и таблицы
Создание БД и таблицы в “SQLite Sample”, если они ещё не созданы, осуществляется при нажатии на кнопку Create.
В данном методе, мы сначала проверяем, существует ли файл с именем “sample.sqlite” (переменная dbFileName), если его нет, то создаем. Этот файл фактически и является базой данных.
После этого мы подключаемся к созданной БД:
Для выполнения SQL команд будем использовать переменную m_sqlCmd, чтобы это стало возможным в первую очередь зададим объект класса SqlConnection, используемый SQLiteCommand:
После выполним запрос на создание таблицы:
Подключение к уже существующей таблице
Подключение к уже существующей таблице осуществляется при нажатии на кнопку Connect. Код метода очень похож на тот, что мы разбирали выше, поэтому на нем мы останавливаться не будем.
Чтение данных
Чтение данных осуществляется при нажатии на кнопку Read all, при этом из существующей БД считываются все данные и выводятся в таблицу.
Разберем этот метод более подробно. Первое, что необходимо сделать, это проверить наличие связи с БД:
Данные, считанные из базы, мы будем помещать в таблицу DataTable, а из неё будем из перегружать в элемент DataGridView, расположенный на нашей форме. Для этого создадим SQL запрос и адаптер, который будет выполнять запрос и передавать полученные от СУБД данные в таблицу
Если таблица не пуста, перенесем данные из нее в элемент dgvViewer.
Добавление данных в БД
Добавление данных в БД осуществляется при нажатии на кнопку Add. При этом будет вызван соответствующий метод.
В нем мы также, вначале проверяем, есть ли связь с БД, после этого создает диалоговое окно для ввода имени автора и названия произведения.
Если окно было закрыто по кнопку OK, то записываем введенные данные в БД
На этом можно завершить описание базовых понятий и методов работы с СУБД SQLite.
Спасибо за внимание!
SQLite + C# : 13 комментариев
Например Microsoft SQL Server, MySQL, PostgreSQL, различные NoSQL варианты, который на сегодняшний день появилось огромное количество.
которых – поправьте, пожалуйста
Привет, у тебя нет проблем с поиском кириллических символов в базе? У меня почему-то совсем не ищет
Добрый день! Нет, с такой проблемой не сталкивался. Попробую посмотреть, если что-то найду интересное – напишу.
Здравствуйте. У меня компилятор ругается на то, что не находит пространство имен для AddDataToDb…Что делать?
Вы скачали проект с GitHub(https://github.com/devpractice-repo/SQLiteAndCSharp)? Если да, то должно быть все нормально, если собираете сами, то вам нужно создать соответствующую форму.
P.S.
Лучше возьми пример с GitHub)))
Если что-то не будет работать, отправляйте свой проект на devpractice.mail@gmail.com мы посмотрим.
Здравствуйте. Вот такая ошибка выскакивает при запуске проекта https://i.imgur.com/mPPCeHi.png
Что я делаю не так?
Просто скачал проект с гитхаба и пробую запустить.
Добрый день!
Проверьте, что у вас скачены и установлены все необходимые файлы для работы с SQLite, для этого прочитайте ещё раз раздел (Введение в SQLite) и (Работа с SQLite из C# / Подготовка). Подсказка: в папке bin/Debug у вас должен быть следующий набор файлов:
SQLiteSample.exe
SQLiteSample.exe.config
SQLiteSample.pdb
System.Data.SQLite.dll
System.Data.SQLite.EF6.dll
System.Data.SQLite.Linq.dll
x64/SQLite.Interop.dll
x86/SQLite.Interop.dll
Файлы SQLite.Interop.dll нужно взять вот отсюда http://system.data.sqlite.org/downloads/1.0.109.0/sqlite-netFx40-binary-x64-2010-1.0.109.0.zip и от сюда http://system.data.sqlite.org/downloads/1.0.109.0/sqlite-netFx40-binary-Win32-2010-1.0.109.0.zip
Нужно установить Microsoft Visual C++ 2010
Не ясно как определить lbStatusText.Text. Явно в проекте lbStatusText.Text не определена, а других пояснений нет.
Вот скажите человек пытается разобраться БД, а вы еще ему тему со StatusStrip подбрасываете. В вашем примере lbStatusText.Text не определена. Нужно лезть подключать StatusStrip. А это совсем другая опера. Нельзя ли сделать этот пример без StatusStrip?
Полезная статья, однако, не раскрыта тема команды Update. Т.е изменение данных в таблице формы, и перенос этих изменений в базу.
Здравствуйте.
Подскажите пожалуйста, как мне прочитать данные из ячейки, находящейся в определённом столбце?
К примеру, есть таблица из 4 столбцов: title, discription, date, sirial
Допустим мне нужно прочитать данные из 6-ой строки столбца description
Скажите пожалуйста, как правильно сформировать запрос к базе и вывести результат например в MessageBox?
Большое спасибо
Ускорение сборки проекта на CMake+GCC: предварительная компиляция заголовочных файлов
Есть несколько причин, почему проект на С++ в среднем собирается дольше сравнимых по величине проектов на других языках, например на Java или C#. Соответственно, есть и несколько способов уменьшить время сборки. Одним из самых известных является использование предварительной компиляции заголовочных файлов (precompiled headers). Сегодня я расскажу, как использование этого способа позволило мне существенно уменьшить время сборки моего проекта.
Немного истории и теории
Уже несколько лет я участвую в разработке проекта на C++. Проект кроссплатформенный, на CMake, в качестве основного компилятора под Linux используется GCC. На текущий момент проект разросся до более чем сотни тысяч строк кода, интенсивно используется библиотека Boost и некоторые другие. Со временем сборка проекта стала занимать все больше и больше времени, и в итоге полная сборка всего проекта с нуля на интеграционном сервере занимала почти 45 минут.
Пришло время задуматься об оптимизации процесса сборки, и я решил попробовать прикрутить предварительную компиляцию заголовочных файлов. Тем более, что сравнительно недавно вышла версия CMake 3.16, в которую добавили встроенную поддержку этого приема.
Критериев, по которому тот или иной заголовочный файл включается в кандидаты на предварительную компиляцию (попадает в precompiled.h ), несколько. Прежде всего такие файлы должны сравнительно редко меняться. В противном случае pch-файл будет слишком часто пересоздаваться, что может свести на нет весь выигрыш от использования предварительной компиляции. Во-первых, создание pch-файла — это сама по себе сравнительно длительная операция. А во-вторых, после изменения pch-файла нужно будет пересобрать все файлы, которые от него зависят. Ещё один критерий — частота использования заголовочного файла в исходных файлах. Чем большее число юнитов зависит от заголовочного файла, тем больший смысл имеет предварительная компиляция такого заголовочного файла. Аналогично, чем больше сам заголовочный файл, или чем больше он включает в себя других заголовочных файлов — тем обычно больше выигрыш от предварительной компиляции.
Есть несколько подходов к предварительной компиляции заголовочных файлов. Кроме того, они могут немного отличаться от компилятора к компилятору. Часто используется интрузивный подход, когда заголовочный файл с наиболее используемыми заголовочными файлами явно включается в исходники проекта. Например, на Visual C++ это выглядит так:
При этом подходе в файл (в данном случае stdafx.h — историческое название для precompiled.h ) включаются наиболее часто используемые и редко изменяемые заголовочные файлы, а сам этот файл включается во все необходимые исходники проекта. Основной минус такого подхода в создании неявных зависимостей. Глядя на исходный файл невозможно сказать, какие именно заголовочные файлы из stdafx.h в нем используются. И нет простого автоматического способа это проверить. Такой подход оптимизирован только для предварительной компиляции заголовочных файлов.
Поэтому на Visual C++ можно использовать слегка модифицированный способ:
При таком подходе с одной стороны, по-прежнему, можно использовать предварительную компиляцию заголовков для ускорения сборки, а с другой — видны явные зависимости каждого исходника. Такие зависимости можно автоматически проверять, создав вариант сборки, в котором предварительная компиляция заголовков не используется, и периодически запуская такую сборку на интеграционном сервере. Необходимо только обернуть содержимое stdafx.h необходимым #ifdef ‘ом, который будет игнорировать включение заголовков внутри него при сборке без предварительной компиляции.
При таком подходе добавляются накладные расходы на повторное подключение некоторых заголовков. Однако, поскольку такие заголовки внутри себя содержат необходимую защиту от повторного подключения ( #ifdef guard’ы), этими дополнительными расходами обычно можно пренебречь.
К делу
При оптимизации чего либо важно иметь метрики для оценки эффективности оптимизации. В качестве очевидного кандидата, например, можно использовать время сборки всего проекта. Кроме того, можно замерять время компиляции каждого юнита. В CMake это удобно сделать, задав «обёртки» для запуска команд компиляции или линковки:
Это позволит при сборке увидеть время на компиляцию или линковку в виде:
Кроме того, при добавлении или отладки предварительной компиляции заголовков могут быть полезны следующие ключи GCC:
В CMake эти ключи можно задать так:
Этот ключ позволяет вывести для каждого юнита время каждой фазы компиляции, в виде:
Чтобы иметь возможность удобно просуммировать подобный вывод из лог-файла для всех юнитов, я написал скрипт на Python, который также позволяет сравнивать два лог-файла, что позволяет удобно изучать влияние каждого изменения.
Например, после добавления предварительной компиляции заголовков в мой проект, распределение времени каждой фазы изменилось следующим образом (я опустил некоторые фазы для краткости):
Из этого вывода можно увидеть, что предварительная компиляция заголовков позволила кардинально уменьшить время на первичную обработку и анализ текста заголовков (parsing, preprocessing). Однако при этом несколько увеличилось время на другие фазы, например на оптимизацию и генерацию машинного кода. Это объясняется тем, что теперь многие заголовочные файлы анализируются только один раз, однако информация из них включается при сборке каждого исходного файла. В результате компилятор с одной стороны экономит время на чтении и анализе заголовочных файлов, но с другой стороны ему приходится обрабатывать больший объем данных, что оказывает влияние на время других фаз.
На основании анализа данных о потраченном на компиляцию времени я мог оптимизировать использование предварительно откомпилированных заголовков. Поначалу я использовал один и тот же набор предварительно компилируемых заголовков для всех целей проекта. Этот набор включал в себя часто включаемые в проекте заголовки из Boost и стандартной библиотеки. Однако статистика времени компиляции показала как уменьшение времени сборки одних целей, так и увеличение времени сборки других. Цели, время сборки которых увеличилось, не использвали Boost. Поэтому следующим логичным решением было разделение набора предварительно компилируемых заголовочных файлов на два. Один из них включал заголовки только из стандартной библиотеки, а второй дополнительно включал заголовки из Boost. Использование двух различных наборов позволило уменьшить время сборки всех целей — и тех, что использовали Boost, и тех, что использовали только стандартную библиотеку.
Как можно увидеть, в моем случае в результате предварительной компиляции заголовков, время сборки в итоге уменьшилось с 43 до 35 минут.
Что касается использования предварительной компиляции заголовочных файлов, то это весьма действенный способ уменьшить время сборки проекта.