Используйте fmod()
из <cmath>
. Если вы не хотите включать заголовочный файл C (примечание: U
не может быть float
или double
):
template<typename T, typename U>
constexpr T dmod (T x, U mod)
{
return !mod ? x : static_cast<long long>(x) % mod + x - static_cast<long long>(x);
}
//Usage:
double z = dmod<double, unsigned int>(14.3, 4);
double z = dmod<long, short>(14, 4);
//This also works:
double z = dmod(14, 4);
double z = dmod(14, 0);
double z = dmod(myFirstVariable, someOtherVariable);
Создание сетевого соединения с сервером базы данных является (относительно) дорогим. Аналогично просьба, чтобы сервер подготовил SQL-оператор, является (относительно) дорогой.
Используя пул соединения/оператора, можно снова использовать существующие соединения / подготовленные операторы, избежав стоимости инициирования соединение, анализируя SQL и т.д.
Я не знаком с c3p0, но преимущества объединения соединений и операторов включают:
Производительность. Соединение с базой данных является дорогим и медленным. Объединенные соединения можно оставить физически подключенными к базе данных и совместно использовали среди различных компонентов тот доступ к базе данных потребности. Тем путем стоимость соединения оплачена на этот раз и амортизирована через все компоненты потребления.
Диагностика. Если у Вас есть одна подсистема, ответственная за соединение с базой данных, становится легче диагностировать и проанализировать использование соединения с базой данных.
Пригодность для обслуживания. Снова, если у Вас будет одна подсистема, ответственная за распространение соединений с базой данных, то Ваш код будет легче поддержать чем если бы каждый компонент, подключенный к самой базе данных.
Соединение и разъединение от базы данных являются дорогой операцией. При помощи объединения можно написать код, чтобы открыть и закрыть соединения, но пул решает, когда на самом деле сделать это, оставив определенное число соединений открытым в течение определенного времени.
Объединение оператора? Вы говорите о кэшировании оператора?
Заключение в кавычки книги Постоянства JAVA с В спящем режиме
Существует три причины использования пула:
Получение нового соединения является дорогим. Некоторые системы управления базами данных даже запускают абсолютно новый серверный процесс для каждого соединения.
Поддержание многих неактивных соединений является дорогим для системы управления базами данных, и пул может оптимизировать использование неактивных соединений (или разъединиться, при отсутствии запросов).
Создание подготовленных операторов является также дорогим для некоторых драйверов, и пул соединения может кэшировать операторы для соединения через запросы.