Winform und CrystalReport, Performance

stonezz

Grünschnabel
Hallo Zusammen

Ich habe eine WinForm Anwendung zum Erstellen von Belgen (Rechnungen, Lieferscheinen, usw.). Die Belege werden mit CrystalReport und dem CrystalReportViewer dargestellt und ausgedruckt. Nach dem Verteilen der Anwendung an die Kunden, muss ich die Datenbankverbindung des Reports entsprechend anpassen. Dies mache ich mit dem folgenden Code:

Code:
 private void AssignConnectionInfo(ReportDocument aReport)
        {
            if (overriddenReportConnection != null)
            {
                // build up new connection info
                ConnectionInfo info = CreateConnectionInfo();

                // set connection info for every table in the report (and subreport)                
                foreach (Table table in aReport.Database.Tables)
                {
                    TableLogOnInfo tableLogOnInfo = table.LogOnInfo;
                    tableLogOnInfo.ConnectionInfo = info;
                    table.ApplyLogOnInfo(tableLogOnInfo);
                }

                // grap subreports 
                Sections sections = aReport.ReportDefinition.Sections;
                foreach (Section section in sections)
                {
                    ReportObjects reportObjects = section.ReportObjects;
                    foreach (ReportObject reportObject in reportObjects)
                    {
                        if (reportObject.Kind == ReportObjectKind.SubreportObject)
                        {
                            SubreportObject subreportObject = (SubreportObject) reportObject;
                            ReportDocument subreportDocument =
                                subreportObject.OpenSubreport(subreportObject.SubreportName);
                            Database database = subreportDocument.Database;
                            Tables tables = database.Tables;
                            foreach (Table table in tables)
                            {
                                TableLogOnInfo tableLogOnInfo = table.LogOnInfo;
                                tableLogOnInfo.ConnectionInfo = info;
                                table.ApplyLogOnInfo(tableLogOnInfo);
                            }
                        }
                    }
                }
            }
        }


Funktioniert auch wunderbar. Das Problem ist aber die Performance. Dieser Code wird jedesmal durchlaufen, wenn eine Vorschau erzeugt wird, oder ausgedruckt wird. Gibt es eine Möglichkeit, die gesetzte Verbindung zu speichern, damit dies nur einmalig gemacht werden müsste?
Eine andere Idee ist, die Rapporte zu Cachen, so könnte ich nach dem Initialisieren auf den gecacheten Rapport zugreifen -> bin aber mit meiner Anwendung bez. Memory schon am limit (System.OutOfMemoryException..) :eek:

Danke für die Tipps!
Sandra
 

Neue Beiträge

Zurück