我们的旧版Web服务中使用了以下Web方法。
[WebMethod(Description = "Get Bulk Data")]
public string[] getBulkData(string[] arrInput)
{
string[] arrResults = new string[arrInput.Length];
using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ToString()))
{
conn.Open();
//some db operations...
for (int arrIndex = 0; arrIndex < arrInput.Length; arrIndex++) //arrInput size can be very large
{
arrResults[arrIndex] = getResult();
}
}
return arrResults;
}
private string getResult()
{
string r;
using (SqlConnection thisConn = new SqlConnection(ConfigurationManager.ConnectionStrings["mydb2"].ToString()))
{
//some db operations
//assign values to r
}
return r;
}
Web方法getBulkData
接受一个字符串数组,查询数据库并返回相同大小的结果数组。结果来自私有方法getResult()
,它也将查询数据库。
我不确定这是否是正确的实现,但我倾向于说它不是,因为有多个查询数据库,这可能会影响getBulkData的性能。显然,该数组中的元素越多,处理时间越长。
如果我在getBulkData()中创建thisConn对象,并将其传递给getResult,那么在提高性能方面会有什么不同吗?在这种情况下,处理大型阵列的最佳方法是什么?
非常感谢。
答案 0 :(得分:0)
数据库事务需要时间来处理。如果您在循环中查询数百或数千次数据库,您的性能肯定会受到影响。如果可能,尝试将GetResult方法修改为仅触发一次,但将结果保存在IEnumerable类型的属性中。这会将所有记录放入计算机的内存中,并允许您使用LINQ对其运行查询。使用这种方法,您会看到性能的显着提高。您可以看到示例here。