C# Npgsql:如何准备语句

C# Npgsql:如何准备语句,c#,performance,postgresql,prepared-statement,npgsql,C#,Performance,Postgresql,Prepared Statement,Npgsql,我们正在为多人游戏开发一个数据库后端。服务器是用C#编写的,通过Npgsql与Postgres数据库通信 现在,本手册介绍了如何使用准备好的语句: NpgsqlCommand command = new NpgsqlCommand("select * from tablea where column1 = :column1", conn); // Now add the parameter to the parameter collection of the command specifying

我们正在为多人游戏开发一个数据库后端。服务器是用C#编写的,通过Npgsql与Postgres数据库通信

现在,本手册介绍了如何使用准备好的语句:

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(以及NpgSql池中的NpgsqlConnection)对象


谢谢

我建议你不要使用事先准备好的声明。Npgsql的性能还不是很好:)对不起

另外,为了发送大量insert命令,我认为您应该查看NpgsqlCopy支持。它将为您提供更好的性能。
我希望它能帮上忙。

复制是用来读/写文件的,不是吗?在这种情况下,它没有用,因为我们把所有数据都保存在内存中。但是感谢你对准备好的语句的糟糕性能的提示。是的。但它也被用来向服务器发送大量数据。我想这是你想要做的。如果我误读了你的帖子,很抱歉。:)接受,因为提示在NPGSQL中尚未执行准备好的语句。不幸的是,除了那些包含bytea数据的语句外,仍然建议不要对任何语句使用准备。这些都经过优化,可以与准备好的语句一起使用。对不起。我仍然需要努力提高准备好的报表的性能。看这里,似乎准备好的报表现在有了良好的性能。它是版本2.1.0,Npgsql现在是版本2.2.1!