Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Outlook: Export Programm bringt "System.OutOfMemoryException"
flex
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

Outlook: Export Programm bringt "System.OutOfMemoryException"

beantworten | zitieren | melden

Hallo,

ich entwickle gerade ein kleines Programm, mit dem ich die E-Mails sowie Meetings exportieren kann. Alles Items sollen auf dem Dateisystem gespeichert werden, mit der Ordnerstruktur wie sie in Outlook angelegt sind.


private void ExportItems(MAPIFolder folder)
        {
            Directory.CreateDirectory(ExportPathField.Text + folder.FullFolderPath);

            Items items = folder.Items;
            if (items.Count > 0)
            {
                for (int counter = 1; counter ≤ items.Count; counter++)
                {
                    object item = items[counter];

                    switch (Microsoft.VisualBasic.Information.TypeName(item))
                    {
                        case "MailItem":
                            (item as MailItem).SaveAs(ExportPathField.Text + folder.FullFolderPath + @"\" + (item as MailItem).ReceivedTime.ToOADate() + ".msg");
                            break;
                        case "MeetingItem":
                            (item as MeetingItem).SaveAs(ExportPathField.Text + folder.FullFolderPath + @"\" + (item as MeetingItem).ReceivedTime.ToOADate() + ".msg");
                            break;
                        default:
                            break;
                    }
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(item);
                } 
            }
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(items);

            for (int counter = 1; counter ≤ folder.Folders.Count; counter++)
            {
                ExportItems(folder.Folders[counter]);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(folder.Folders[counter]);
            }
}

Das Programm funktioniert mir kleinen Postfächern super, allerdings gibt es bei größeren eine "System.OutOfMemoryException". Der bis dort hin exportierte Ordner ist dann 999MB groß. Ich habe den Build schon auf 64-Bit umgestellt und in der App.cfg folgendes eingefügt, allerdings ohne Erfolg:
  
<runtime>
   <gcAllowVeryLargeObjects enabled="true" />
</runtime>

Ich hoffe Ihr könnt mir helfen und sagen wo mein Fehler ist.

Viele Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von flex am .
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 507
Herkunft: Münster

beantworten | zitieren | melden

Kannst Du mal den Stacktrace posten?
private Nachricht | Beiträge des Benutzers
flex
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

So wie das aussieht funktioniert das nicht.
Fehler
System.OutOfMemoryException
HResult=0x8007000E
Nachricht = Es steht nicht genügend Arbeitsspeicher zur Verfügung. Schließen Sie einige Dateien oder Programme, und versuchen Sie es erneut
Quelle = <Die Ausnahmequelle kann nicht ausgewertet werden.>
Stapelüberwachung:
<Die Ausnahmestapelüberwachung kann nicht ausgewertet werden.>
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

An welcher Stelle genau in dem Code oben tritt der Fehler auf?
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen...
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

so wie ich Office kenne - muss man jedes Objekt separat freigeben. Das sieht zwar bei dir eigentlich danach aus als ob - andererseits hatte ich bei direkter Verwendung der PIA's selbst schon ähnliche Probleme - mit NetOffice war das Problem bei mir von alleine behoben...

LG
private Nachricht | Beiträge des Benutzers
flex
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

An dieser Stelle:

(item as MailItem).SaveAs(ExportPathField.Text + folder.FullFolderPath + @"\" + (item as MailItem).ReceivedTime.ToOADate() + ".msg");
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

Hallo, kann es sein das die Platte voll läuft? Ganz eine einfache Frage ;)
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen...
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

Ich meine, dass Taipi hier Recht hat.
Outlook ist zickig und will i.d.R. Dinge einzeln disposed haben.

Sei Dir aber bewusst, dass der Zugriff auf Exchange/Office 365 ohnehin der bessere Weg wäre, als direkt sich an Outlook zu hängen.
private Nachricht | Beiträge des Benutzers