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

            }
  • 相关阅读:
    Bert whole mask为什么效果比mask字效果更好?
    开放领域关系抽取文献综述
    乱序语言模型XLNET的理解
    开源知识图谱介绍
    CRF条件随机场基础理解(一)
    Knowledge-Augmented Language Model and its Application to Unsupervised Named-Entity Recognition(Facebook AI 2019) 文献综述
    BERT+知识图谱: K-BERT Enabling Language Representation with Knowledge Graph 文献理解
    中文新词发现相关算法调研
    win10 + 独显 + Anaconda3 + tensorflow_gpu1.13 安装教程(跑bert模型)
    HTML页面仿iphone数字角标
  • 原文地址:https://www.cnblogs.com/flashlm/p/CS20PagerBug.html
Copyright © 2011-2022 走看看