Member 13662536 Ответов: 1

Справка или предложения по повышению производительности - sharepoint


Привет,

Я новичок в SharePoint,

У меня есть задание улучшить код, но это не очень хороший код. Слишком много условий if/else, конкатенация строк и самая сложная часть-это сложная логика с SPListItemCollection, я собираюсь разбить ее на части и попытаться применить единую ответственность, по крайней мере, и я еще не нашел способа, но сначала мне нужно улучшить производительность кода

Дайте любую идею, мне действительно нужно получить помощь или предложения. (Извините за опечатки, английский-не мой родной язык)

Заранее спасибо.

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate ()
                {

                    Guid webid = SPContext.Current.Web.ID;
                    int lcid = (int)SPContext.Current.Web.Language;

                    string newsweb = "en/News";
                    string Pagelibrary = "/en/News/Pages";
                    string sitename = "en";

                    Utility utl = new Utility();

                    string LangLcid = utl.GetCurrentLanguageUI();
                    string newstitle = utl.GetLabelName("LandingpageNews", LangLcid);
                    string readmoretext = utl.GetLabelName("NewsReadmore", LangLcid);
                    string viewallnewstext = utl.GetLabelName("NewsViewall", LangLcid);

                    if (lcid == 1025)
                    {
                        newsweb = "ar/News";
                        Pagelibrary = "/ar/News/Pages";
                        sitename = "ar";
                    }

                    SPSite site = SPContext.Current.Site;
                    SPWeb web = site.OpenWeb(newsweb);

                    using (SPSite site = new SPSite(site.ID))
                    {
                        SPList list = null;
                        using (SPWeb web = site.OpenWeb(newsweb))
                        {
                            //listGuid = web.GetList(Pagelibrary).ID.ToString();
                            list = web.GetList(Pagelibrary);
                        }

                        SPQuery query = new SPQuery();
                        System.Globalization.CultureInfo.CurrentCulture.ClearCachedData();
                        DateTime time = DateTime.Now; // Use current time
                        string format = "yyyy-MM-dd"; // Use this format
                        string comparedate = time.ToString(format);

                        if (lcid == 1025)
                        {
                            int date = time.Day;
                            string datestring = string.Empty;
                            string monthstring = string.Empty;
                            int month = time.Month;
                            int year = time.Year;

                            if (date < 10)
                            {
                                datestring = "0" + date.ToString();
                            }
                            else
                            {
                                datestring = date.ToString();
                            }

                            if (month < 10)
                            {
                                monthstring = "0" + month.ToString();
                            }

                            else
                            {
                                monthstring = month.ToString();
                            }

                            comparedate = year.ToString() + "-" + monthstring + "-" + datestring;
                        }

                        query.Query = @"
                            <OrderBy>
                            <FieldRef Name='NewsArticleStartDate' Ascending='FALSE' />
                            </OrderBy>
                            <Where>
                            <And>
                            <Eq>
                            <FieldRef Name='_ModerationStatus' />
                            <Value Type='ModStat'>0</Value>
                            </Eq>
                            <And>
                            <Eq>
                            <FieldRef Name='Priority' />
                            <Value Type='Text'>Yes</Value>
                            </Eq>
                            <Leq>
                            <FieldRef Name='NewsArticleStartDate' />
                            <Value IncludeTimeValue='TRUE' Type='DateTime'>" + comparedate + @"</Value>
                            </Leq>
                            </And>
                            </And>
                            </Where>";

                        SPListItemCollection itemcol = list.GetItems(query);

                        if (itemcol.Count > 0)

                        {

                            string viewalllink = string.Empty;

                            viewalllink = "<a class='moewnews' href='/en/News/Pages/Newshome.aspx?currentpage=1'>" + viewallnewstext + "<img src='/_catalogs/masterpage/img/arrow-news.png'></a>" + newstitle;

                            if (lcidcheck == 1025)

                                viewalllink = "<a class='moewnews' href='/ar/News/Pages/Newshome.aspx?currentpage=1'>" + viewallnewstext + "<img src='/_catalogs/masterpage/img/icon_arrow-right.png'></a>" + newstitle;

                            title.InnerHtml = viewalllink;

                            string publishingRollupImageField = itemcol[0].GetFormattedValue("NewsPageImage");

                            string pageImageurl;

                            if (publishingRollupImageField != string.Empty)

                            {

                                profimg1.InnerHtml = publishingRollupImageField;

                            }

                            else

                            {

                                profimg1.InnerHtml = "<img src='/_catalogs/masterpage/img/conf.jpg'/>";

                            }

                            string titleurl = @"<a href='/" + sitename + "/News/" + itemcol[0].Url.ToString() + "'>" + itemcol[0]["Title"].ToString() + "</a>";

                            firsttitle.InnerHtml = titleurl;

                            firstnav.InnerHtml = @" <a href='#tab_a' data-toggle='pill'>" + itemcol[0]["Title"].ToString() + "</a>";

                            if (itemcol[0].GetFormattedValue("PublishingPageContent").Length <= 150)

                            {

                                firstinfo.InnerText = HtmlRemoval.StripTagsRegex(itemcol[0].GetFormattedValue("PublishingPageContent"));

                            }

                            else

                            {

                                string temstring = HtmlRemoval.StripTagsRegex(itemcol[0].GetFormattedValue("PublishingPageContent"));

                                int tempindex = 149;

                                try

                                {

                                    do

                                    {

                                        tempindex++;

                                    } while (temstring[tempindex] != ' ');

                                }

                                catch (Exception ex)

                                {

                                }

                                firstinfo.InnerText = HtmlRemoval.StripTagsRegex(itemcol[0].GetFormattedValue("PublishingPageContent")).Substring(0, tempindex) + "...";

                            }

                            string articledate = itemcol[0]["NewsArticleStartDate"].ToString();

                            DateTime date = Convert.ToDateTime(articledate);

                            string firstdatetext = String.Format("{0:m}", date) + ", " + date.Year;

                            firstdate.InnerText = firstdatetext;

                            secondtitile.InnerHtml = @"<a class='firsthead' href='/" + sitename + "/News/" + itemcol[1].Url.ToString() + "'>" + itemcol[1]["Title"].ToString() + "</a>";

                            secondnav.InnerHtml = @" <a href='#tab_b' data-toggle='pill'>" + itemcol[1]["Title"].ToString() + "</a>";

                            string secondarticledate = itemcol[1]["NewsArticleStartDate"].ToString();

                            if (itemcol[1].GetFormattedValue("NewsPageImage") != null)

                            {

                                string publishingRollupImageFieldsecond = itemcol[1].GetFormattedValue("NewsPageImage");

                                if (publishingRollupImageFieldsecond != string.Empty)

                                {

                                    profimg2.InnerHtml = publishingRollupImageFieldsecond;

                                }

                                else

                                {

                                    profimg2.InnerHtml = "<img src='/_catalogs/masterpage/img/conf.jpg'/>";

                                }

                            }

                            if (itemcol[1].GetFormattedValue("PublishingPageContent") != null)

                            {

                                if (itemcol[1].GetFormattedValue("PublishingPageContent").Length <= 150)

                                {

                                    secondinfo.InnerText = HtmlRemoval.StripTagsRegex(itemcol[1].GetFormattedValue("PublishingPageContent"));

                                }

                                else

                                {

                                    string temstring = HtmlRemoval.StripTagsRegex(itemcol[1].GetFormattedValue("PublishingPageContent"));

                                    int tempindex = 149;

                                    try

                                    {

                                        do

                                        {

                                            tempindex++;

                                        } while (temstring[tempindex] != ' ');

                                    }

                                    catch (Exception ex)

                                    {

                                    }

                                    secondinfo.InnerText = HtmlRemoval.StripTagsRegex(itemcol[1].GetFormattedValue("PublishingPageContent")).Substring(0, tempindex) + "...";

                                }

                            }

                            DateTime seconddatee = Convert.ToDateTime(secondarticledate);

                            string seconddatetext = String.Format("{0:m}", seconddatee) + ", " + seconddatee.Year;

                            seconddate.InnerText = seconddatetext;

                            thirdtitle.InnerHtml = @"<a class='secondhead' href='/" + sitename + "/News/" + itemcol[2].Url.ToString() + "'>" + itemcol[2]["Title"].ToString() + "</a>";

                            thirdnav.InnerHtml = @" <a href='#tab_c' data-toggle='pill'>" + itemcol[2]["Title"].ToString() + "</a>";

                            string thirdarticledate = itemcol[2]["NewsArticleStartDate"].ToString();

                            DateTime thirddatee = Convert.ToDateTime(thirdarticledate);

                            string thirddatetext = String.Format("{0:m}", thirddatee) + ", " + thirddatee.Year;

                            thirddate.InnerText = thirddatetext;

                            if (itemcol[2].GetFormattedValue("NewsPageImage") != null)

                            {

                                string publishingRollupImageFieldthird = itemcol[2].GetFormattedValue("NewsPageImage");

                                if (publishingRollupImageFieldthird != string.Empty)

                                {

                                    profimg3.InnerHtml = publishingRollupImageFieldthird;

                                }

                                else

                                {

                                    profimg3.InnerHtml = "<img src='/_catalogs/masterpage/img/conf.jpg'/>";

                                }

                            }

                            if (itemcol[2].GetFormattedValue("PublishingPageContent") != null)

                            {

                                if (itemcol[2].GetFormattedValue("PublishingPageContent").Length <= 150)

                                {

                                    thirdinfo.InnerText = HtmlRemoval.StripTagsRegex(itemcol[2].GetFormattedValue("PublishingPageContent"));

                                }

                                else

                                {

                                    string temstring = HtmlRemoval.StripTagsRegex(itemcol[2].GetFormattedValue("PublishingPageContent"));

                                    int tempindex = 149;

                                    try

                                    {

                                        do

                                        {

                                            tempindex++;

                                        } while (temstring[tempindex] != ' ');

                                    }

                                    catch (Exception ex)

                                    {

                                    }

                                    thirdinfo.InnerText = HtmlRemoval.StripTagsRegex(itemcol[2].GetFormattedValue("PublishingPageContent")).Substring(0, tempindex) + "...";

                                }

                            }

                        }

                    }

                });

            }
            catch (Exception ex)

            {

            }

        }


Что я уже пробовал:

Что я собираюсь делать:

1) строка.Formate или StringBuilder вместо конкатенации
2) устанавливает лимит для элементов, возвращаемых в вашем запросе.
3) Включите только те поля, которые я буду использовать. ViewFields: это помогает определить, какие поля будут возвращены в запросе.
4) я думаю, что использование кэширования данных и объектов-это один из хороших методов повышения производительности.

1 Ответов

Рейтинг:
1

pkfox

Лично я бы выбросил все это и начал снова, но если вы собираетесь сохранить его, разбейте код на маленькие кусочки и поместите их в методы для начала. Очень больно читать весь этот спагетти-код ( особенно в случае загрузки ). Я думаю, тебе лучше начать все сначала.


Member 13662536

Да, вы правы, это спагетти-код и лучший способ, просто перепишите его, я ничего не могу сделать)) Спасибо за ваш ответ)