2010-08-25 5 views
0

J'ai des problèmes pour charger plusieurs instances de ReportDocuments en mémoire. En utilisant le code suivant:Crystal Reports Nombre maximal d'instances actives

Dim sRPT As New ReportDocument 
sRPT.Load("PATH\TO\MY.RPT") 

Dim sRPTs As New List(Of ReportDocument) 
For i = 0 To 100 
    Dim sClone As ReportDocument = sRPT.Clone 
    sClone.Refresh() 

    sRPTs.Add(sClone) 

    Console.WriteLine("RPT Clonado " & i.ToString()) 
Next 

quand je tends l'instance 74e, l'appel Refresh() lance une exception "Load Report a échoué". En outre, la même exception se produit même en appelant directement la méthode .Load (path) et affecte tous les ReportDocumetns dans l'application, quel que soit le fichier RPT que je charge/actualise. J'utilise actuellement Crystal XI R2, mais le test de ce code avec les assemblages v12 (CR 2008) s'est terminé avec le même problème.

Est-ce que quelqu'un a déjà trébuché avec quelque chose comme ça? La raison de toutes ces instances est la mise en cache d'un rapport pour plusieurs fichiers rpt, par utilisateur, et restera probablement telle quelle s'il existe une solution de contournement pas si méchante pour ce problème.

Répondre

0

Je l'ai déjà rencontré auparavant, et AFAIK le seul moyen de contourner le problème est de vous assurer de fermer les rapports lorsque vous en avez fini avec eux.

+0

Merci pour le message rapide! Nous avons dû revoir tout le code des modules de reporting il y a quelque temps déjà pour un problème similaire. Mais cette "mise en cache des rapports" vise à maintenir des instances ouvertes prêtes à l'emploi, nous n'avons donc pas besoin d'ouvrir ces rapports chaque fois que nous avons besoin de les utiliser (les RPT que nous utilisons sont chargés indéfiniment et nous ne seront probablement pas autorisés pour les changer) ainsi la fermeture * de tous les rapports mis en cache n'est pas une option (nous nettoyons partiellement le cache s'il y a des instances de rapport inactives - à jamais inactives). Merci encore, Germán –