使用`NpgsqlParameter `和`AddWithValue`与`NpgsqlDbType`之间的区别>

问题描述 投票:2回答:3

Npgsql documentation指出使用NpgsqlParameter<T>更好,因为它是强类型的,并且不会因装箱值类型导致的无用堆分配而使垃圾收集器紧张。

我有以下两个命令声明了用于特定参数的数据类型:

不使用NpgsqlParameter<T>

command.Parameters.AddWithValue("id", NpgsqlTypes.NpgsqlDbType.Integer, 123);

使用NpgsqlParameter<T>

cmd.Parameters.Add(new NpgsqlParameter<Int32>("id", NpgsqlTypes.NpgsqlDbType.Integer) { TypedValue = 123 });

我的问题是,第一个命令是否等效于第二个命令(不包装int值),还是应该使用第二个命令?

我认为第一个只是告诉Npgsql使用哪种数据类型,但仍将int置于框内。

Npgsql文档指出,使用NpgsqlParameter 更好,因为它是强类型的,并且不会因装箱值而导致无用堆分配而使垃圾收集器紧张...

c# postgresql npgsql strong-typing
3个回答
1
投票

[这并不是真正的答案,因为我相信哈维先生已经做了足够的事情,但是它比我可以发表的评论更长,并且没有格式,所以请您提前道歉。


1
投票

NpgsqlParameter 优于AddWithValue的主要优点是避免了装箱,因为AddWithValue接受一个对象。这意味着每当您将值类型(int,double)传递给AddWithValue时,都将导致不必要的堆分配。


0
投票

[仔细考虑了我们从社区收到的意见后,我们决定将NpgsqlParameter<T>与明确的NpgsqlDbType一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.