zoukankan      html  css  js  c++  java
  • CommunityServer2.0分页控件的优化

    记得去年NetFocus在群上说CommunityServer2.0的分页控件存在性能问题,当时没有留意,想不到最近就被我就碰上了,拿Pager类来说,出现问题的代码如下:
            void AddPageLinks()
            
    {
                
    // First add the lower page buttons
                
    //
                
    //CalculateTotalPages方法是在计算总页数
                pagingHyperLinks = new HyperLink[CalculateTotalPages()];

                
    // Create the buttons and add them to
                
    // the Controls collection
                
    //
                for (int i = 0; i < pagingHyperLinks.Length; i++)
                
    {
                    pagingHyperLinks[i] 
    = new HyperLink();
                    pagingHyperLinks[i].EnableViewState 
    = false;
                    pagingHyperLinks[i].Text 
    = (i + 1).ToString();
                    pagingHyperLinks[i].NavigateUrl 
    = CreatePagerURL((i + 1).ToString());
                    Controls.Add(pagingHyperLinks[i]);
                }

            }

    从代码中可以看出,程序直接实例化总页数多个的HyperLink,这样如果总页数过多时,必然会导致内存溢出。
    可惜当时没有好好听netfocus说,没有记下他的解决方案,只好自己想就去来实现。
    我采用的是对原代码影响最小的方式,只要改变原来的两个方法即可,解决的方法如下:
    修改AddPageLinks方法:
            void AddPageLinks()
            
    {
                
    int totalPages = CalculateTotalPages();
                
    int lowerBound = 0;
                
    int upperBound = totalPages;
                
    if (totalPages > 5)
                
    {
                    lowerBound 
    = (PageIndex - 2);
                    upperBound 
    = (PageIndex + 3);

                    
    if (lowerBound <= 0)
                        lowerBound 
    = 0;
                    
    if (PageIndex == 0 || PageIndex == 1)
                    
    {
                        upperBound 
    = 5;
                    }

                    
    else if (PageIndex < (totalPages - 2))
                    
    {
                        upperBound 
    = PageIndex + 3;
                    }

                    
    else if (PageIndex == (totalPages - 2))
                    
    {
                        lowerBound 
    = totalPages - 5;
                        upperBound 
    = totalPages;
                    }

                    
    else if (PageIndex == (totalPages - 1))
                    
    {
                        lowerBound 
    = totalPages - 5;
                        upperBound 
    = totalPages;
                    }

                }

                pagingHyperLinks 
    = new HyperLink[upperBound - lowerBound];
                
    for (int i = 0; i < upperBound - lowerBound; i++)
                
    {
                    pagingHyperLinks[i] 
    = new HyperLink();
                    pagingHyperLinks[i].EnableViewState 
    = false;
                    pagingHyperLinks[i].Text 
    = (i + lowerBound + 1).ToString();
                    pagingHyperLinks[i].NavigateUrl 
    = CreatePagerURL((i + 1 + lowerBound).ToString());
                    pagingHyperLinks[i].CssClass 
    = "OtherPage";
                    Controls.Add(pagingHyperLinks[i]);
                }

            }

    修改RenderButtonRange方法:
            void RenderButtonRange(int start, int end, HtmlTextWriter writer)
            
    {
                
    for (int i = 0; i < end - start; i++)
                
    {
                    
    // Are we working with the selected index?
                    
    //
                    int realpage = i + start;
                    
    if (PageIndex == realpage)
                    
    {
                        
    // Render different output
                        Literal l = new Literal();
                        l.Text 
    = "<span class=""currentPage"">[" + (realpage + 1).ToString() + "]</span>";
                        l.RenderControl(writer);
                    }

                    
    else
                    
    {
                        pagingHyperLinks[i].RenderControl(writer);
                    }

                    
    if (realpage < (end - 1))
                        writer.Write(
    " ");
                }

            }
  • 相关阅读:
    Scott Mitchell 的ASP.NET 2.0数据教程
    asp.net单点登录 一个账号只能在一个地方登录
    javascript关键字加亮加连接
    Windows环境变量
    IE支持HTML5的解决方法
    JavaScript test() 方法及判断是否为iPhone|iPad|iPod
    《C#4.0中文视频教程共20课完整版》下载
    DataView.RowFilter 的使用
    SQL Server中如何备份到异机
    完美兼容IE、FF、Opera的Ajax类支持get、post、自定义回调函数
  • 原文地址:https://www.cnblogs.com/flashlm/p/CS20PagerBug.html
Copyright © 2011-2022 走看看