找回密码
 立即注册

QQ登录

只需一步,快速开始

dlerror
中级会员   /  发表于:2014-2-7 10:20  /   查看:8592  /  回复:8
使用版本是:SPREAD for ASP.NET 7.0
Spread中一共有3807行,54列,使用了虚拟翻页,每页显示100行。
单元格输入数字,按下计算按钮,在服务器对spread中的数值进行计算并表示在Spread中。
计算后,页面的反应速度特别慢,双击某个单元格,10秒钟后,该单元格可以编辑,录入内容后,双击其它单元格,40秒后,单元格才可以编辑。
以上问题只有在后台计算后才出现,页面初始时,不会出现以上的问题。
如何才能提高页面反应速度?

服务器端代码如下:
Me.spdBuhindai.SaveChanges()

Dim ZAIKOINDX As Integer
Dim NYUKOSU As Long = 0
Dim SYUKOSU As Long = 0
Dim ZAIKO As Long = 0
Dim ZENZAN As Long = 0

With Me.spdBuhindai.Sheets(0)
    For intRow = 0 To .Rows.Count - 1 Step 3
        ZENZAN = .Cells(intRow + 2, 1).Value
        If .Cells(intRow, SpreadColumn.UPD_FLG).Text = "99999" OrElse
           .Cells(intRow + 1, SpreadColumn.UPD_FLG).Text = "99999" OrElse
           .Cells(intRow + 2, SpreadColumn.UPD_FLG).Text = "99999" Then

            For ZAIKOINDX = 3 To 49 - 1
                NYUKOSU = .Cells(intRow, ZAIKOINDX).Value
                SYUKOSU = .Cells(intRow + 1, ZAIKOINDX).Value
               
                ZAIKO = ZENZAN + NYUKOSU - SYUKOSU
                .Cells(intRow + 2, ZAIKOINDX).Value = ZAIKO

                If ZAIKO < 0 Then
                    .Cells(intRow + 2, ZAIKOINDX).ForeColor = Drawing.Color.FromArgb(255, 0, 0)
                Else
                    .Cells(intRow + 2, ZAIKOINDX).ForeColor = Drawing.Color.FromArgb(0, 0, 0)
                End If
                ZENZAN = ZAIKO
            Next

            Continue For

        End If

    Next
End With

Me.spdBuhindai.SaveChanges()

8 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2014-2-7 14:31:00
沙发
回复 1楼dlerror的帖子

您好,谢谢详细的问题描述。

Spread web 大数据情况下,性能优化有几种办法,您可以先试试:
1 减少分页数据量(是ASP.NET程序性能提升最为常见的解决方法)
2 不在客户端自动计算 (ClientAutoCalculation = False)
3 用 Cell. Value 代替 Cell. Text
4 不要使用View State来管理SPREAD 的status
   参考文档路径:Spread for ASP.NET 7.0 Product Documentation > Developer's Guide > Maintaining State
回复 使用道具 举报
dlerror
中级会员   /  发表于:2014-2-8 08:53:00
板凳
回复 2楼roger.wang的帖子

谢谢版主提供的方案。
这几点我都试了,除了减少分页数据量外,其它几点都没有效果。
减少分页数据量这块,需要和客户商量。
不知道还有没有其它的方案?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-2-8 10:04:00
地板
回复 3楼dlerror的帖子

不客气。

web程序的优化,主要思路是通过减少一次呈现的数据量来优化的。
分页(翻页)分真分页和假分页两种:
1 真分页
  1.1  首先获得一个int,总数,如3807.
1.2   然后依据每页显示数据量进行获取数据,如100行/页
  1.3  当用户翻页的时候,上一页数据销毁,再重复1.2步骤。

  这样每时每刻保证使用用户看到是100行数据,编程针对这100行数据进行处理,速度应该很快的。

2 假分页--障眼法
  一次从数据库获取全部数据
  赋值给控件,虽然每次用户看到的是100行数据,而处理确实全部的数据,这个是导致web程序响应慢的根源。

如果数据量小,可通过假分页,数据量大、用户对响应要求高,则需要写真分页来实现--需要开发人员多写一些代码实现。
回复 使用道具 举报
dlerror
中级会员   /  发表于:2014-2-10 08:27:00
5#
回复 4楼roger.wang的帖子

确定使用假分页方式来表示。
使用Spread的DataBind方法表示数据后,IE进程使用6MB左右内存,页面操作流畅。
当在服务器端对Spread循环赋值后,行数与列数没有改变,但IE进程使用了13MB左右的内存,页面操作变缓慢。
服务器端对Spread的赋值,是不是增加了Spread的缓存之类的东西?有没有什么方法释放掉这类的缓存?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-2-10 16:43:00
6#
回复 5楼dlerror的帖子

行、列未变化,6M变13M内存?

您有对应的demo吗?  我用对应demo帮您咨询一下我们的产品团队,看看有无减少缓存的解决办法。
回复 使用道具 举报
dlerror
中级会员   /  发表于:2014-2-11 10:32:00
7#
回复 6楼roger.wang的帖子

Visual Studio 2012 + SPREAD for ASP.NET 7.0 + IE9
不好意思,我们使用的是日文系统,demo没有工程文件,只有页面的前台和后台的代码。
页面单元格输入数字后,点击按钮,页面重新计算赋值。
可能是页面比较简易,效果不够明显,每次点击按钮后,页面缓慢稍微增加。
麻烦版主帮忙看一下。

Demo2.zip

4.11 KB, 下载次数: 793

回复 使用道具 举报
dlerror
中级会员   /  发表于:2014-2-13 10:48:00
8#
回复 6楼roger.wang的帖子

版主您好!
这个问题已经解决了,问题的原因不是后台循环计算,具体怎么发生也没找到。
解决方法是计算完成后,把Spread的列的CellType重新设置,页面缓慢的现象不再出现。
谢谢版主的帮忙!
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-2-13 11:54:00
9#
回复 8楼dlerror的帖子

谢谢您的反馈。

分享解决方案都分享出来了,赞一个。  这个必须精华帖啊  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部