472,353 Members | 2,087 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,353 software developers and data experts.

Slow printing in C#/.NET...

I C# code prints very slow as compared to a third party barcode printing
software. That software prints approximately 10 labels in 2 seconds while my
C# code prints 10 labels in 5 to 6 seconds. And this differences increases
with the increase number of labels.

The code is as follwods:
Here rdr = OleDbDataReader
Font is Times New Roman, 12pt
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.HasMorePages = false;

if(this.rdr.Read())
{
e.Graphics.DrawString(rdr[0].ToString(), font, Brushes.Black, 10, 20);
e.Graphics.DrawString(rdr[1].ToString(), font, Brushes.Black, 10, 40);
e.Graphics.DrawString(rdr[2].ToString(), font, Brushes.Black, 10, 60);

if( --this.labels_to_print > 0)
e.HasMorePages = true;
}
}

How can I increase printing speed? Please help.

Arif.
Nov 17 '05 #1
4 8798
Arif,

I don't see much room for improvement here. It looks like you are
disposing of resources correctly (or rather, not allocating anything that
you don't need during the printing process).

The Graphics object takes advantage of GDI+, which is very slow. This
is probably the issue. I would suspect that the third-party component is
not using GDI+. Why not just use that?

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"Arif" <Ar**@discussions.microsoft.com> wrote in message
news:F2**********************************@microsof t.com...
I C# code prints very slow as compared to a third party barcode printing
software. That software prints approximately 10 labels in 2 seconds while
my
C# code prints 10 labels in 5 to 6 seconds. And this differences increases
with the increase number of labels.

The code is as follwods:
Here rdr = OleDbDataReader
Font is Times New Roman, 12pt
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.HasMorePages = false;

if(this.rdr.Read())
{
e.Graphics.DrawString(rdr[0].ToString(), font, Brushes.Black, 10, 20);
e.Graphics.DrawString(rdr[1].ToString(), font, Brushes.Black, 10, 40);
e.Graphics.DrawString(rdr[2].ToString(), font, Brushes.Black, 10, 60);

if( --this.labels_to_print > 0)
e.HasMorePages = true;
}
}

How can I increase printing speed? Please help.

Arif.

Nov 17 '05 #2
Another issue is that you're actually reading directly out of the database
while printing, and using OleDb (Access?) mind you -- not a good performer.

Could you read the data into an array first, then call the Print() and just
iterate through the array inside the PrintPage event? You could then
isolate the performance problems between reading from the db and how long
the GDI+ calls and spooling is actually taking. I would put good money that
your db access is slowing you down MUCH more than GDI+.

I have an app that prints Legal (8.5x14) paychecks and I can spool about 10
checks/pages per second on a 2.4Ghz/512MB laptop. They have at least 100
DrawString()s, probably a dozen fonts (including a custom MICR font -
similar to a barcode), at least 30-40 DrawLine()s, and 4 DrawImage()s for
signature files and logos on the checks. Everything is read into memory
before I call the Print() method though.

Craig
"Arif" <Ar**@discussions.microsoft.com> wrote in message
news:F2**********************************@microsof t.com...
I C# code prints very slow as compared to a third party barcode printing
software. That software prints approximately 10 labels in 2 seconds while
my
C# code prints 10 labels in 5 to 6 seconds. And this differences increases
with the increase number of labels.

The code is as follwods:
Here rdr = OleDbDataReader
Font is Times New Roman, 12pt
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.HasMorePages = false;

if(this.rdr.Read())
{
e.Graphics.DrawString(rdr[0].ToString(), font, Brushes.Black, 10, 20);
e.Graphics.DrawString(rdr[1].ToString(), font, Brushes.Black, 10, 40);
e.Graphics.DrawString(rdr[2].ToString(), font, Brushes.Black, 10, 60);

if( --this.labels_to_print > 0)
e.HasMorePages = true;
}
}

How can I increase printing speed? Please help.

Arif.

Nov 17 '05 #3
I would recommend that you get your hands on a profiler (comes with
VS2005, for VS2003 you can use CompuWare's DevPartner Community
Edition:

http://www.compuware.com/products/de...rtner&sf=1&p=0

Profile your application, figure out where it's spending all its time,
and then figure out how to optimize that.

Nov 17 '05 #4
Now i am using the simplest code that reads the data from an array rather
than from OleDbDatareader object, as follows:

private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString(this.data_ary[this.labels_to_print-1, 0], font,
Brushes.Black, 10, 20);
e.Graphics.DrawString(this.data_ary[this.labels_to_print-1, 1], font,
Brushes.Black, 10, 40);
e.Graphics.DrawString(this.data_ary[this.labels_to_print-1, 2], font,
Brushes.Black, 10, 60);

if( --this.labels_to_print > 0)
e.HasMorePages = true;
else
e.HasMorePages = false;

}

But I am seeing the same down printing speed as was in the case using
OleDBDataReader instead of an array.

I also notice that when I turn off the printer,click to print then 64
pages/labels are spooled very fast. But if the printer is ON then this
spooling is comparatively slow.

I think that the printer is printing labels perhaps as a separate print job
for each page because there is a step/0.5 second delay between two labels
printing. But the third party software prints contineously and very fast.
when I used the following code to print 64 labels separately, I see the same
printing style/speed as was when printing 64 labels in on printing job.

some_methos()
{
for(int i=0; i < this.labels_to_print; i++) //printing 64 labels as separate
print job.
this.printDocument1.Print();
}

private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.HasMorePages = false;

e.Graphics.DrawString(this.data_ary[this.labels_to_print-1, 0], font,
Brushes.Black, 10, 20);
e.Graphics.DrawString(this.data_ary[this.labels_to_print-1, 1], font,
Brushes.Black, 10, 40);
e.Graphics.DrawString(this.data_ary[this.labels_to_print-1, 2], font,
Brushes.Black, 10, 60);
}

I think that may be there some settings for printer that I should take care
in C# code.

Any new idea, please share.

Arif.
"Craig Scheets" wrote:
Another issue is that you're actually reading directly out of the database
while printing, and using OleDb (Access?) mind you -- not a good performer.

Could you read the data into an array first, then call the Print() and just
iterate through the array inside the PrintPage event? You could then
isolate the performance problems between reading from the db and how long
the GDI+ calls and spooling is actually taking. I would put good money that
your db access is slowing you down MUCH more than GDI+.

I have an app that prints Legal (8.5x14) paychecks and I can spool about 10
checks/pages per second on a 2.4Ghz/512MB laptop. They have at least 100
DrawString()s, probably a dozen fonts (including a custom MICR font -
similar to a barcode), at least 30-40 DrawLine()s, and 4 DrawImage()s for
signature files and logos on the checks. Everything is read into memory
before I call the Print() method though.

Craig
"Arif" <Ar**@discussions.microsoft.com> wrote in message
news:F2**********************************@microsof t.com...
I C# code prints very slow as compared to a third party barcode printing
software. That software prints approximately 10 labels in 2 seconds while
my
C# code prints 10 labels in 5 to 6 seconds. And this differences increases
with the increase number of labels.

The code is as follwods:
Here rdr = OleDbDataReader
Font is Times New Roman, 12pt
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.HasMorePages = false;

if(this.rdr.Read())
{
e.Graphics.DrawString(rdr[0].ToString(), font, Brushes.Black, 10, 20);
e.Graphics.DrawString(rdr[1].ToString(), font, Brushes.Black, 10, 40);
e.Graphics.DrawString(rdr[2].ToString(), font, Brushes.Black, 10, 60);

if( --this.labels_to_print > 0)
e.HasMorePages = true;
}
}

How can I increase printing speed? Please help.

Arif.


Nov 17 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

16
by: Jason | last post by:
Hey, I'm an experience programmer but new to Python. I'm doing a simple implementation of a field morphing techinique due to Beier and Neely...
0
by: lubprog | last post by:
hi, I am printing jpg files which are on a disk. The file name is selected from a database and the file is located on the disk and then printed. I...
1
by: chankey | last post by:
I have code that is able to print using the PrintDocument class, PrintPage event and the Graphics.DrawString method. It is on the slow side...
0
by: The ants are driving me crazy | last post by:
Printing in .net 2003 using PrintDocument class seems to be slow. Has anyone else found this to be true? And found a work-around?
3
by: Toral Shah | last post by:
hi i have made a data entry program and want to print my report in dot matrix printer. but the printing speed is really slow. but when i print my...
33
by: nw | last post by:
Hi all, I'm constantly confronted with the following two techniques, which I believe often produce less readable code, but I am told are faster...
0
by: Kerem Gümrükcü | last post by:
Hi, i use the code from this code sample on MSDN: for printing a 5 and sometimes 70 page text-only data:...
12
by: Eps | last post by:
Hi there, I am doing the following, this is a List of audio files. this.Where(p =p.Album == AnAudioFileObject.Album).Select(s =>...
1
by: daschicken | last post by:
Hi guys, currently I'm encountering a strange behavior while using the PrinterJob class. I've got a little program printing some pages. Most of...
1
by: Kemmylinns12 | last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
0
jalbright99669
by: jalbright99669 | last post by:
Am having a bit of a time with URL Rewrite. I need to incorporate http to https redirect with a reverse proxy. I have the URL Rewrite rules made...
0
by: Matthew3360 | last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function. Here is my code. ...
2
by: Matthew3360 | last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
0
by: Matthew3360 | last post by:
Hi, I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web...
0
Oralloy
by: Oralloy | last post by:
Hello Folks, I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA. My problem (spelled failure) is with the...
0
by: Carina712 | last post by:
Setting background colors for Excel documents can help to improve the visual appeal of the document and make it easier to read and understand....
0
by: Rahul1995seven | last post by:
Introduction: In the realm of programming languages, Python has emerged as a powerhouse. With its simplicity, versatility, and robustness, Python...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.