SharePoint2010 代码设置发送邮件慢的问题

  近来在Sharepoint的开发中,用户要求用代码设置通知我功能,因为在每个站点中设置通知我时,用户不能多选,只能一个列表一个列表的选择,用户嫌太多列表时麻烦,所以给用户提出说只要用户选择了站点,系统自动遍历该站点下的列表,设置用户的通知,代码很简单,就是用SPAlert类就可以了,开始Demo代码执行也很快,但把代码给程序人员后,程序人员说执行速度慢,页面超时,开始以为是列表太多,页面响应时间短,计划改成后台的Job来跑,又试着写了代码准备测试,用户的主站点下有10个产品子站点,每个产品子站点还有一个子站点,在测试环境一跑代码,完了,慢... 用一个人的账户测试了一下,设完所有产品的通知,要30分钟,这肯定不行,查原因吧。

   发现是执行SPalert.update() 这句话时慢,要20多秒,  为啥啊?

   通过查sdk,发现还有一个带false的update方法,用这个一试,哈哈,快如闪电,原来用30分钟的,现在一闪而过。

   原来如此! 默认用update()方法时要给用户发一封邮件的,告诉用户已经设置某某列表的通知,而加false参数的这个不给用户发通知,之所以慢是因为测试环境的外发邮件是随便设置了一个,并不能真正的发送邮件,导致的慢,开始本机快是因为本机同时设置了SMTP服务器,所以没有发现慢,而本来我也不需要在设置时给用户发送邮件,20多个站点,列表很多,给用户发送邮件,用户不烦死啊,所以,我就应该用带false参数的这个!

    代码如下:

  public static void Addalert(string ProductName,string strUrl,string userId)

        {

             using (SPSite site = new SPSite(strUrl))

            {

                Console.WriteLine("--\t1  "+System.DateTime.Now.ToLongTimeString());

                using (SPWeb web = site.OpenWeb())

                {

                    Console.WriteLine("--\t\t2  " + System.DateTime.Now.ToLongTimeString());

                    foreach (SPList list in web.Lists)

                    {

                        Console.WriteLine("--\t\t\t3  " + System.DateTime.Now.ToLongTimeString());

                        if (!list.Hidden)

                        {

                            SPUser user = web.SiteUsers[userId]; 

                            SPAlert spAlert = user.Alerts.Add();

                            spAlert.Title = "SPS系统" + ProductName + "通知列表" + list.Title ;

                            spAlert.EventType = SPEventType.All;

                            spAlert.AlertFrequency = SPAlertFrequency.Immediate;

                            spAlert.AlertType = SPAlertType.List;

                            spAlert.List = list;

                            spAlert.User = user;

                            SPAlertTemplate newTemplate = new SPAlertTemplate();

                            newTemplate.Name = "SPAlertTemplateType.GenericList";

                            spAlert.AlertTemplate = newTemplate;

                            spAlert.Update(false);

                        }

                        Console.WriteLine("--\t\t\t\t4  " + System.DateTime.Now.ToLongTimeString());

                    } 

                } 

            }

        }

 

 

 

        private static void RemoveAlert(string siteURLvalue,string userId)

        {

            SPSecurity.RunWithElevatedPrivileges(delegate()

            {

                using (SPSite _site = new SPSite(siteURLvalue))

                {

                    SPWeb _web = _site.OpenWeb();

                    _site.AllowUnsafeUpdates = true;

                    _web.AllowUnsafeUpdates = true;

                    //SPUser _currentUser = SPContext.Current.Web.CurrentUser;

                    SPUser _currentUser = _web.EnsureUser(userId);

                    SPAlertCollection AlertLists = _web.EnsureUser(_currentUser.LoginName).Alerts;

                    int AlertNum = AlertLists.Count;

                    for (int alertIndex = 0; alertIndex < AlertNum; alertIndex++)

                    {

                        AlertLists.Delete(0);

 

                    }

                    _web.Update();

                    _web.AllowUnsafeUpdates = false;

                    _site.AllowUnsafeUpdates = false;

                }

            });

        }

你可能感兴趣的:(SharePoint)