SELECT TOP期间内存泄漏

时间:2016-03-17 15:17:26

标签: c# sql-server web-services stored-procedures asmx

我有一个非常简单的.asmx Web服务,它从ms sql server存储过程返回一个数据集。该过程返回大约15,000条记录。调用Web服务时,iis服务器将锁定BSD。我做的第一件事就是通过将select语句更改为"选择前1000 ..."来设置对返回的记录数量的限制。我不断增加数量以确定导致它破坏的容量。

我发现即使我把它设置为"选择前20000"它不会崩溃。但是,如果我删除"顶部x"帽子,每次都会崩溃。我完全失去理解" top x"存储过程中的cap可以防止在返回包含或不包含上限的相同数量的记录时发生崩溃。

我也有从同一台服务器上的.net网络应用程序调用的完全相同的存储过程,并且没有上限不会导致此问题。以下是我认为可能相对的一切:

网络服务代码:

[WebMethod]
    [SoapHeader("soapSecurityCredentialsHeader", Direction = SoapHeaderDirection.In)]
    /* credentials check removed */
    public DataSet ESP_Export_000DS()
    { 
        DataSet dsResults = new DataSet();
        dsResults = syncBLObject.ESP_Export_000();
        return dsResults;
    }

这是存储过程的接口:

        public static DataSet ESP_Export_000()
    {
        DataSet dsResults = new DataSet();

        try
        {
            SqlConnection sqlConn = new SqlConnection(...);
            SqlCommand sc = new SqlCommand("...[ESP_Export_000]");
            sc.CommandType = CommandType.StoredProcedure;
            sc.Connection = sqlConn;
            sc.CommandTimeout = 300;
            using (SqlDataAdapter da = new SqlDataAdapter(sc))
            {
                 da.Fill(dsResults);
            }
        }
        catch(Exception excp)
        {
            throw new Exception(excp.Message, excp.InnerException);
        }

        return dsResults;
    }

存储过程大约需要2.5秒才能运行。 Web服务在大约5秒内返回数据。 IIS服务器是:2008 R2 Enterprise,iis 6.1,2 gig内存。 SQL Server是MS SQL Server 2012 Web版。

1 个答案:

答案 0 :(得分:0)

@CodingGorilla和@NickOtten都是正确的,问题在于服务器而不是代码。

RackSpace的优秀人员推荐了这个解决问题的powershell脚本。

再次感谢@NickOtten,你真正了解问题的核心,并从一开始就这样做了。

$root = ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}’
$items = Get-ChildItem -Path Registry::$Root -Name

Foreach ($item in $items) {
if ($item -ne “Properties”) {
$path = $root + “\” + $item
$DriverDesc = Get-ItemProperty -Path Registry::$path | Select-Object -expandproperty DriverDesc
if ($DriverDesc -eq “Citrix PV Ethernet Adapter”) {
Set-ItemProperty -path Registry::$path -Name LROIPv4 -Value 0
}
}
}