【问题标题】:handle large array with asmx web service使用 asmx Web 服务处理大型数组
【发布时间】:2013-01-16 03:28:37
【问题描述】:

在我们的旧版 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,这对提高性能有什么影响吗?在这种情况下,处理大型数组的最佳方法是什么?

非常感谢。

【问题讨论】:

    标签: c# .net web-services asmx


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2012-09-24
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多