Npgsql: как подготовить заявления - PullRequest
1 голос
/ 10 декабря 2010

мы разрабатываем базу данных для многопользовательской игры. Сервер написан на C # и общается с базой данных Postgres через Npgsql.

Теперь в руководстве показано, как использовать подготовленные операторы:

NpgsqlCommand command = new NpgsqlCommand("select * from tablea where column1 = :column1", conn);
// Now add the parameter to the parameter collection of the command specifying its type.
command.Parameters.Add(new NpgsqlParameter("column1", NpgsqlDbType.Integer);
// Now, prepare the statement.
command.Prepare();
// Now, add a value to it and later execute the command as usual.
command.Parameters[0].Value = 4;

И в нем говорится, что подготовленные операторы действительны только в сеансе базы данных. У меня сейчас два вопроса:

1.) Признает ли сервер, что эта команда была подготовлена, если я создам новый объект NpgsqlCommand с тем же текстом команды и типами параметров, или мне нужно сохранить объект и просто изменить переменные перед повторным выполнением? В этом примере объект команды располагается после запроса.

2.) Готовые операторы, вероятно, повысят производительность, хотя у нас ТОЛЬКО простые утверждения в этом стиле:

SELECT f1,f2 FROM t1
UPDATE t1 SET f1=1, f2=2

Возможно, что сотни запросов с одинаковым стилем выполняются подряд - в настоящее время для каждого запроса создается новый объект NpgsqlCommand (а также NpgsqlConnection из пула NpgSql).

Спасибо!

1 Ответ

2 голосов
/ 13 декабря 2010

Я бы посоветовал вам не использовать готовые заявления.Npgsql пока не имеет очень хорошей производительности.:( Извините за это.

также, чтобы отправить много команд вставки, я думаю, вам стоит взглянуть на поддержку NpgsqlCopy. Это даст вам гораздо лучшую производительность. Надеюсь, это поможет.

...