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(
    " ");
                }

            }
  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/flashlm/p/CS20PagerBug.html
Copyright © 2011-2022 走看看