weixin_33739646 2015-12-10 00:45 采纳率: 0%
浏览 46

对于循环运行缓慢

I have a Web Method that is querying Outlook to grab all the distribution lists from the Global Address List.

This is grabbing over 4,000 distribution lists, which is exactly what I want it to do, but when it goes into the loop to pass the 4,000 lists into my List it takes over 3 minutes for it to finish the for loop. Can anyone see anything that is out of the ordinary and have an answer of why this may be happening?

Here is my code:

        public class DistributionListDetails
        {
            public int DistributionListId { get; set; }
            public string DistributionListEmail { get; set; }
        }

        List<DistributionListDetails> distributionLists = new List<DistributionListDetails>();
        int val = 0;

        //create Outlook application. 
        Outlook.Application oApp = new Outlook.Application();

        //get Mapi NameSpace and Logon. 
        Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

        //get Global Address List. 
        Outlook.AddressLists oDLs = oNS.AddressLists;
        Outlook.AddressList oGal = oDLs["Global Address List"];

        //get a specific distribution list. 
        string sDL = "TestDL";
        Outlook.AddressEntries oEntries = oGal.AddressEntries;
        Outlook.AddressEntry oDL = oEntries[sDL];

        if (oDL.Manager != null)
        distributionLists.Add(new DistributionListDetails
            {
                DistributionListId = val,
                DistributionListEmail = oDL.Manager.ToString()
            });

        //get all of the members of the distribution list. 
        oEntries = oDL.Members;
        Outlook.AddressEntry oEntry = default(Outlook.AddressEntry);

        int i = 0;
        for (i = 1; i <= oGal.AddressEntries.Count && i <= 10; i++)
        {
            oEntry = oGal.AddressEntries[i];
            distributionLists.Add(new DistributionListDetails
            {
                DistributionListId = val,
                DistributionListEmail = oEntry.Name
            });
        }

NOTE: I am binding the returned list from the loop to a dropdown via AJAX.

  • 写回答

3条回答 默认 最新

  • weixin_33725272 2015-12-10 00:49
    关注

    Assuming that the query to AD isn't the bottleneck, try this LINQ on for size. It replaces your last loop.

    distributionLists.AddRange(oGal.AddressEntries
      .Cast<Outlook.AddressEntry>()
      .Select(
        x => new DistributionListDetails 
        { 
            DistributionListId = val, 
            DiestributionListEmail = x.Name
        }));
    

    Edit: Force cast the AddressEntries into an IQueryable so select will work.

    评论

报告相同问题?

悬赏问题

  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?