首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓慢的Webservice回调

缓慢的Webservice回调
EN

Stack Overflow用户
提问于 2017-10-25 00:14:39
回答 3查看 210关注 0票数 0

问题是如何加快ASP.NET web应用程序的加载速度,我发现web应用程序过滤功能的加载时间是不可接受的。过滤器列表是从数据库生成的。请参阅下列代码:

这个函数在.js中,正在调用webservice方法。

代码语言:javascript
复制
function filterSetup() {
    filterChanged = true;
    var reset = true;
    DDL_WebService.fillFilter(SucceededCallbackWithContext, FailedCallback,new ddlContext("My_Filter", reset));
    filterSystemSetup();   
}

此函数也在.js中,并在webservice方法之后执行。

代码语言:javascript
复制
function SucceededCallbackWithContext(result, userContext) {
    var ddl = $get(userContext.cntrl);
    var curVal = userContext.getVal();
    // Fetching result...
}

此函数是称为"DDL_WebService.vb“的web服务文件中的一种方法。它在.vb中,正在从数据库中获取数据。

代码语言:javascript
复制
<WebMethod()> _
    Public Function fillFilter() As List(Of String)
        Dim strSQL As String

        strSQL = "select '(All)' from My_Table "

        Return getData(strSQL)
    End Function

问题:我认为在fillFilter()的最后一行之后,它应该在几乎没有时间内转到SucceededCallbackWithContext()( step-into命令告诉我在中间没有发生任何事情)。但是,从SucceededCallbackWithContext()的最后一行进入fillFilter()需要大约7秒的时间。

我不知道是什么在占用时间,我如何确认和解决这个问题。

任何帮助都是非常感谢的:)

更新:使用Developer工具从另一个角度看问题,我得到了剪贴画中显示的结果。现在,我的问题变成了一些方法运行时间太长的可能原因(注意:对于请求时间最长的webservice方法,我将查询速度从10秒提高到小于3秒,但请求时间仍然是15秒左右)。一个webservice方法的执行是否会影响另一个webservice方法的速度?再次感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-12 23:50:42

虽然我已经很久没有发布这个问题了,但我还是想更新我在这个问题上的进展,只是为了感谢Beldi和mostafa的建议,并在遇到类似问题时给人们一些提示。

总的来说,这个问题还没有解决,但我们想出了一个解决办法。

我们猜测有些查询可能需要很长时间才能完成,所以我根据开发人员工具列出了所有需要很长时间的查询。我一个接一个地测试了它们,发现它们都非常快。在接下来的相当长的一段时间里,我被困在验证开发工具所指示的东西上。

当我剖析以下代码时,就出现了一个突破:

代码语言:javascript
复制
 $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "dataservice/getSimData_WebService.asmx/getSimsList",
        data: JSON.stringify(params),
        dataType: "json",
        success: function (data, textStatus) {
            if (textStatus == "success") {
                var thegrid = $("#jqGrid_sims")[0];
                thegrid.addJSONData(data.d);
            }
        },
        error: function (data, textStatus) {
            alert("Error from get grid data");
        }
    }); 

在这段ajax调用中,代码在执行时发出请求。从执行开始到if语句开始之间的时间是请求时间,也就是开发人员工具indicates.The代码在if语句中花费的时间是获取时间。

在查看了每个ajax调用的请求时间和获取时间之后,我发现模拟功能的获取时间需要相当长的时间。由于加载功能会导致页面被冻结,并且试图减少冻结时间会带来更多的不确定性和更长的时间,所以我们最终决定最初不加载它。相反,一旦用户单击按钮,它将加载。

希望这对任何有类似问题的人都有帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-10-25 05:39:15

如果要过滤数据,为什么要加载所有列的所有记录?如果您的my_table记录大约为1000个或小于1000个(我的意思是您有一个小的数据集),您就无法理解性能问题,但是过了一段时间,随着数据的增长(例如,它达到了100000),您会注意到您的服务越来越慢。

如果查询不是代码中的主要查询,那么首先使用浏览器、开发人员工具或任何其他工具来度量服务的响应时间,以确保服务器端代码或javascript代码中存在问题。

票数 0
EN

Stack Overflow用户

发布于 2017-10-25 09:43:57

在发送之前尝试压缩您的datataTable!我与您共享两个功能,即压缩和解压缩:

代码语言:javascript
复制
 Public Shared Function CompressData(ByVal ds As DataSet) As Byte()
        Try
            Dim data As Byte()
            Dim memStream As New MemoryStream()
            Dim zipStream As GZipStream = New GZipStream(memStream, CompressionMode.Compress)
            ds.WriteXml(zipStream, XmlWriteMode.WriteSchema)
            zipStream.Close()
            data = memStream.ToArray()
            memStream.Close()
            Return data
        Catch ex As Exception
            Return Nothing
        End Try
    End Function


Public Shared Function DecompressData(ByVal data As Byte()) As DataSet
    Try
        Dim memStream As New MemoryStream(data)
        Dim unzipStream As New GZipStream(memStream, CompressionMode.Decompress)
        Dim objDataSet As New DataSet()
        objDataSet.ReadXml(unzipStream, XmlReadMode.ReadSchema)
        unzipStream.Close()
        memStream.Close()
        Return objDataSet
    Catch ex As Exception
        Return Nothing
    End Try
End Function

希望能帮助你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46921928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档