Оптимизация надстроек Outlook - PullRequest
2 голосов
/ 31 марта 2010

Мой Outlook 2007 Addin работает очень хорошо, до того момента, когда мне придется перемещать большое количество сообщений. Список почтовых отправлений получается так:

Items itemObj = lNamespace.GetFolderFromID(Settings.Default.InputFolder).Items;

        List<MailItem> totalMailItems = new List<MailItem>();

        foreach (MailItem mailItem in itemObj)
        {
            totalMailItems.Add(mailItem);
        }

        //Dispose of itemObj
        itemObj = null;


            MAPIFolder blueFold = lNamespace.GetFolderFromID(Settings.Default.BlueFolder);
        MAPIFolder greenFold = lNamespace.GetFolderFromID(Settings.Default.GreenFolder);
        MAPIFolder orangeFold = lNamespace.GetFolderFromID(Settings.Default.OrangeFolder);
        MAPIFolder redFold = lNamespace.GetFolderFromID(Settings.Default.RedFolder);


    foreach (MailItem mailItem in totalMailItems)
        {
            MailItem xMail = mailItem;
            MessageRelevance mRel = new MessageRelevance();
            mRel = Process_MailItem(ref xMail);              

            xMail.Save();
            switch(mRel)
            {
                case MessageRelevance.Red:
                    xMail.Move(redFold);
                    _lvl2++;
                    break;
                case MessageRelevance.Orange:
                    xMail.Move(orangeFold);
                    _lvl1++;
                    break;
                case MessageRelevance.Blue:
                    xMail.Move(blueFold);
                    _nullLev++;
                    break;
                case MessageRelevance.Green:
                    xMail.Move(greenFold);
                    _lvl0++;
                    break;
            }            

            xMail = null;
        }

Причина, по которой я установил xMail на mailItem, заключается в том, что я не могу использовать mailItem в качестве ссылки, он доступен только для чтения. Теперь остальная часть программы работает отлично, я просто пытаюсь понять, как быстрее перемещать эти элементы. Должен ли я позвонить в Save раньше? Или это просто дополнительный звонок?

1 Ответ

0 голосов
/ 19 апреля 2010

Я не уверен, сколько почтовых отправлений вы на самом деле перемещаете, поэтому я буду считать, что много.

Единственное, что может быть проблемой, это то, что Save() метод может быть узким местом в вашем коде. У меня была похожая проблема с надстройкой Excel, которая копировала файлы в несколько мест. Решением для повышения скорости и обеспечения быстрого реагирования на Excel было использование Asynchronous Delegate Invocation, как описано в Предоставление вашему .NET-приложению быстрого и отзывчивого интерфейса с несколькими потоками .

Так что в вашем примере я бы обернул содержимое цикла на totalMailItems. Обратите внимание, что приведенный ниже код может быть не на 100% правильным, но я надеюсь, что вам хватит идеи и руководства, которые помогут вам.

private delegate void SaveEmail(MailItem mailItem);

foreach (MailItem mailItem in totalMailItems)
{
    SaveEmail save = SaveMailItem; 
    IAsyncResult saveResult = save.BeginInvoke(mailItem, SaveCallBack, "MailItem Saved") 
    xMail = null;
}

private void SaveCallBack(IAsyncResult result)
{ // do stuff here if you want to... }

private void SaveMailItem(MailItem mailItem)
{
    MailItem xMail = mailItem;
    MessageRelevance mRel = new MessageRelevance();
    mRel = Process_MailItem(ref xMail);              

    xMail.Save();
    switch(mRel)
    {
        case MessageRelevance.Red:
            xMail.Move(redFold);
            _lvl2++;
            break;
        case MessageRelevance.Orange:
            xMail.Move(orangeFold);
            _lvl1++;
            break;
        case MessageRelevance.Blue:
            xMail.Move(blueFold);
            _nullLev++;
            break;
        case MessageRelevance.Green:
            xMail.Move(greenFold);
            _lvl0++;
            break;
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...