1

我有一个具有以下结构的 listArray:

listArray[0] insert_idlist = listArray (value, value, value, ect)

该数组在每个维度中包含大约 2000 个值。

var string_list = "'" + string.Join("', '", insert_idlist[0]) + "'";
//var string_list = "'0169624'";

出于数据库查询的目的,我试图将第一个维度连接成一个字符串,如上所述。但是,在部署时,这会导致程序挂起,并且根据以前对部署环境的经验,我怀疑大量值是原因。

当启用注释行时,代码按预期运行。

任何人都可以提出一种替代的连接方法来提高性能吗?

4

4 回答 4

0

我认为您可以使用表值参数将列表传递给数据库。

这将通过首先没有它来解决您的连接问题。

表值参数提供了一种将多行数据从客户端应用程序编组到 SQL Server 的简便方法,而无需多次往返或特殊的服务器端逻辑来处理数据。您可以使用表值参数将数据行封装在客户端应用程序中,并在单个参数化命令中将数据发送到服务器。传入的数据行存储在一个表变量中,然后可以使用 Transact-SQL 对其进行操作。

从阅读MSDN 上的这篇文章开始。

于 2012-12-12T12:00:41.340 回答
0

您可以尝试使用 ' StringBuilder ' 并使用 'capacity' 构造函数参数预先分配足够的空间。这样,在构建目标字符串时,不必一次又一次地将字符串复制到更长的缓冲区。然后,您使用 foreach 语句或类似语句进行连接。

这可能会也可能不会更快,这取决于“string.Join”是如何在内部实现的,这在 .NET 框架的不同版本中可能会有所不同。

于 2012-12-12T12:08:09.830 回答
0

如果您正在以牺牲可读性为代价来寻求性能提升,那么在循环中使用 StringBuilder 应该比String.Join<T>(string, IEnumerable<T>)(如果您避免使用 foreach 甚至更多)更快。

看一眼:

foreach 中的 Stringbuilder 比 for 和 String.Join() 对集合慢吗?

C# 中的 String.Join 性能问题

于 2012-12-12T13:17:15.607 回答
-2

Pass as a parameters.

using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection))
        {
        //
        // Add new SqlParameter to the command.
        //
        command.Parameters.Add(new SqlParameter("Name", dogName));          
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            int weight = reader.GetInt32(0);
            string name = reader.GetString(1);
            string breed = reader.GetString(2);
            Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight,name,breed);
        }
        }
于 2012-12-12T12:01:25.647 回答