2010-01-08 19 views
2

J'utilise Domino.dll pour accéder à un fichier NSF en C# .NET 2.0Nombre maximum de segments de mémoire que les notes peuvent supporter a été dépassé

J'utilise plusieurs filets d'accès 4 fichiers NSF à la fois, son fonctionne bien pour les petits fichiers NSF, mais si j'essaie d'accéder aux grands fichiers NSF je reçois le Mémoire insuffisante Exception et Le nombre maximal de segments de mémoire que Notes peut prendre en charge a été dépassé.

Cette exception se produit généralement lorsque je avoir accès à objet NotesDocument d'un grand NSFVIewFolder dans une boucle while.

Je publie l'instance du document NotesDocument à l'aide de Marshal.ReleaseComObject (NotesDocument); encore il jette la même exception.

Mon but est d'accéder à plusieurs fichiers NSF à la fois (MAX 4 fichiers NSF à la fois) pour les fichiers NSF volumineux (peut être en GB).

+5

Lotus Notes: aaaaaargh! –

+0

Veuillez ne pas indenter vos questions. – SLaks

+0

Les gars qui ont conçu et conçu Lotus Notes étaient censés être incroyablement intelligents, même doués. Alors WTF est arrivé? –

Répondre

1

Je ne suis pas familier avec l'interface C#, mais avec Java, vous devez appeler explicitement la méthode recycle() sur le document notes avant de passer au document suivant. Si vous ne le faites pas, les ressources associées au document de notes ne seront pas nettoyées.

1

Votre problème est similaire au problème this. Quelle version de Domino utilisez-vous pour accéder à la base de données? Vous devez détruire efficacement l'objet. Je ne pense pas que ReleaseComObject libère efficacement la mémoire que le serveur utiliserait également pour fournir les données à COM, manquant ainsi de mémoire.

Je vous suggère d'essayer Java pour cela car la gestion de la mémoire est beaucoup mieux supportée que COM. This article et this on devrait aider à écrire Java pour Domino. This exemple simple vous donne une idée de comment passer à travers une collection de documents.