Повторное использование кода SQL Server через хранимые процедуры - хорошая или плохая практика?

I '

Интересно, что при использовании VisualsToXpsDocument для пакетной записи я могу создать контент для 186 страниц за то время, которое требуется инфраструктуре печати для обработки 21 страницы. Здесь что-то действительно не так.

Чтобы убедиться, что это не просто проблема сложности некоторых элементов управления в приложении, я создал автономное демонстрационное приложение, которое содержит только сетку данных, заполненную 4000 строками статических данных. и около 8 столбцов. Нет проблем с производительностью с самой сеткой данных, только с печатью. Вот наиболее распространенный подход, который я использовал, который дает плохие результаты.

        this.writer 
          = PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue);

        PrintingDocumentPaginator paginator 
          = new PrintingDocumentPaginator(this.PrintConfiguration, 
                contentSize, pageSize, contentRect, this.printSource, false);

        this.writer.WritingProgressChanged += this.OnPrintingProgressChanged;
        this.writer.WritingCompleted += this.OnPrintingCompleted;
        this.writer.WritingCancelled += this.OnPrintingCanceled;

        this.writer.WriteAsync(paginator, 
                this.PrintConfiguration.PrintTicket, paginator.PageCount);

В качестве альтернативы, если я использую следующий код, вызов EndBatchWrite () будет выполнен очень быстро, а остальная часть процесса печати займет гораздо больше времени.

        this.writer 
          = PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue);

        PrintingDocumentPaginator paginator 
            = new PrintingDocumentPaginator(this.PrintConfiguration, 
                    contentSize, pageSize, contentRect, 
                    this.printSource, this.useVectorData);

        this.writer.WritingProgressChanged += this.OnPrintingProgressChanged;
        this.writer.WritingCompleted += this.OnPrintingCompleted;
        this.writer.WritingCancelled += this.OnPrintingCanceled;

        VisualsToXpsDocument sdf 
          = (VisualsToXpsDocument)this.writer.CreateVisualsCollator();

        for (int i = 0; i < paginator.PageCount; i++)
        {
            sdf.WriteAsync(paginator.GetPageVisual(i));
        }

        sdf.EndBatchWrite();

Так что я здесь делаю не так? Я отправляю на принтер неправильные данные? Есть какой-то секрет, который я не вижу?

РЕДАКТИРОВАТЬ - Это относится как к физическим принтерам, так и к файловым принтерам, например, к принтеру XPS, PDF и т. Д.

Ура,

Сэм.

8
задан Sam 19 January 2011 в 14:30
поделиться