Web Services 用asmx web服务处理大数组

fhity93d  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(163)

在我们的遗留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,这在提高性能方面会有什么不同吗?在这种情况下,处理大型数组的最佳方法是什么?

xdnvmnnf

xdnvmnnf1#

数据库事务需要时间来处理。如果你在一个循环中查询数据库数百或数千次,你的性能肯定会受到影响。如果可能的话,尝试修改GetResult方法,使其只触发一次。但是将结果保存在IEnumerable类型的属性中。这会将所有记录放在计算机的内存中,并允许您使用LINQ对其运行查询。使用这种方法,我们将看到性能的显著提高。

相关问题