Наиболее оптимальный и рациональный алгоритм работы с отчётами
Добавлено: 20 авг 2009, 20:20
Добрый день!
Прочитав переписку http://forum.stimulsoft.com/Default.aspx?g=posts&t=142 у меня возникли сомнения по поводу корректности и оптимальности используемого мною алгоритма при работе с отчётами.
Я делаю так:
1. Сохраняю каждый отчёт из дизайнера в своём DLL-файле, которые затем поставляются в дистрибутиве конечным пользователям.
2. Использую следующий класс для загрузки, инициализации переменных и параметров, отображения и печати отчётов, инициализировав его в начале программы: Report.Init("bla-bla-bla");
При последовательных генерациях отчётов наблюдаются незначительные увеличения используемой памяти.
Всё ли корректно в моём коде?
Может есть более быстрые и рациональные способы работы с отчётами?
По поводу параметра LoadOnce: когда лучше использовать true, а когда false? Я делаю так: если пользователь точно будет использовать какой-либо отчёт передаю true, если пользователь может не использовать какой-либо отчёт в работе передаю false.
Генерить классы отчётов и компилить их вместе с приложениями считаю нецелесообразным, т.к. отчётов довольно много и при загрузке приложения все отчёты (весь код приложения) будут загружаться в память, а использоваться в работе в текущем сеансе может всего лишь какой-нибудь один отчёт.
Компилировать клиентом *.mrt файлы при первом запуске отчёта также считаю нецелесообразным, т.к. процесс отнимает некоторое время, думаю предпочтительнее использовать готовые DLL.
Заранее спасибо!
Прочитав переписку http://forum.stimulsoft.com/Default.aspx?g=posts&t=142 у меня возникли сомнения по поводу корректности и оптимальности используемого мною алгоритма при работе с отчётами.
Я делаю так:
1. Сохраняю каждый отчёт из дизайнера в своём DLL-файле, которые затем поставляются в дистрибутиве конечным пользователям.
2. Использую следующий класс для загрузки, инициализации переменных и параметров, отображения и печати отчётов, инициализировав его в начале программы: Report.Init("bla-bla-bla");
Код: Выделить всё
using System;
using System.Windows.Forms;
using System.Collections;
using System.Data;
using Stimulsoft.Report;
using Stimulsoft.Report.Dictionary;
namespace ReportStimul
{
public static class Report
{
private static string ReportFilesPath;
private static string ConnectionString;
public static object RecordSet;
public static Hashtable Fields;
public static void Init(string ConnectionString)
{
Report.ConnectionString = ConnectionString;
ReportFilesPath = System.IO.Directory.GetCurrentDirectory();
StiConfig.LoadLocalization(ReportFilesPath + @"\ru.xml");
Fields = new Hashtable();
}
public static void Generate(string ReportName, bool ShowPreview, bool LoadOnce)
{
try
{
using (StiReport report = StiReport.GetReportFromAssembly(ReportFilesPath + ReportName + ".dll", LoadOnce))
{
if (RecordSet != null)
{
if (RecordSet is DataSet) report.RegData(RecordSet as DataSet);
else if (RecordSet is DataTable) report.RegData(RecordSet as DataTable);
else if (RecordSet is DataView) report.RegData(RecordSet as DataView);
}
else
{
report.Dictionary.Databases.Clear();
report.Dictionary.Databases.Add(new StiSqlDatabase("Connection", ConnectionString));
}
if (Fields.Count > 0)
{
foreach (DictionaryEntry de in Fields)
{
if (de.Value != null) report[de.Key.ToString()] = de.Value;
}
}
if (ShowPreview)
{
report.Show(true);
}
else
{
report.Print(false);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex);
}
finally
{
RecordSet = null;
Fields.Clear();
}
}
}
}
Всё ли корректно в моём коде?
Может есть более быстрые и рациональные способы работы с отчётами?
По поводу параметра LoadOnce: когда лучше использовать true, а когда false? Я делаю так: если пользователь точно будет использовать какой-либо отчёт передаю true, если пользователь может не использовать какой-либо отчёт в работе передаю false.
Генерить классы отчётов и компилить их вместе с приложениями считаю нецелесообразным, т.к. отчётов довольно много и при загрузке приложения все отчёты (весь код приложения) будут загружаться в память, а использоваться в работе в текущем сеансе может всего лишь какой-нибудь один отчёт.
Компилировать клиентом *.mrt файлы при первом запуске отчёта также считаю нецелесообразным, т.к. процесс отнимает некоторое время, думаю предпочтительнее использовать готовые DLL.
Заранее спасибо!