效率问题——请各位帮忙分析一下

snow_haoxue 2008-12-03 05:26:51
问题背景:
现在需要打印位图,把指向位图的指针作为参数传递给打印的实现函数,希望打印的时间尽量短一些,整个位图的大小不定,打印机每次打印的数据量受限制。

具体打印函数(PF)的两种实现:
1、PF分配与位图大小相同的buffer,把整个位图调整后存放在buffer中待用,然后,循环打印内容。
2、PF分配和打印机最大打印容量相等的buffer,循环:调整数据存入buffer——〉打印——〉调整数据——〉打印,直到所有数据打印完毕

不知道,哪一种更好,希望各位帮忙分析一下,谢谢
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
snow_haoxue 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hello_shadow 的回复:]
要提高速度,我认为:
第一是要让打印机一直工作,
第二是不要让CPU停下来等待打印机。
我认为可以先准备一小块数据送入打印机开始打印,然后CPU把要打印的数据放入BUFFER中。当打印机没有数据可以打印时就通知CPU放入数据。

我认为第二个更快,
打印机一直工作,但如果CPU忙,或者内存紧张,用第一个更好。
[/Quote]

因为需要调整数据才能打印,所以,还要考虑分配内存和调整数据的时间,怎样让他们更好的融合在一起,使得总效率最高

另外,忘记说了一个问题,为了监视打印机的状态,同时还开有一个线程
snow_haoxue 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kiffa 的回复:]
对PF最好能有伪代码的表示。

> 1、PF分配与位图大小相同的buffer,把整个位图调整后存放在buffer中待用,然后,循环打印内容。

在这种做法里,对于不同大小的位图,PF中的buffer的大小是一样的还是不同的?这个buffer是根据位图大小来定的,还是根据打印机一次打印的最大数据量来定的?

这两种做法分配内存的方式是否相同,即在堆上还是在栈上分配?buffer是否总是能够容纳整张位图的数据,或者需要多次分配?

另…
[/Quote]

对于1,buffer是根据位图大小一次性分配的,位图大小不同buffer则不同,但每次打印的数据量是由打印最大量来决定的
分配方式相同,使用malloc或者calloc分配,两种实现方法均只分配一次内存,使用完毕free
函数调整在PF内进行
梦之安魂曲 2008-12-03
  • 打赏
  • 举报
回复
要提高速度,我认为:
第一是要让打印机一直工作,
第二是不要让CPU停下来等待打印机。
我认为可以先准备一小块数据送入打印机开始打印,然后CPU把要打印的数据放入BUFFER中。当打印机没有数据可以打印时就通知CPU放入数据。

我认为第二个更快,
打印机一直工作,但如果CPU忙,或者内存紧张,用第一个更好。
kiffa 2008-12-03
  • 打赏
  • 举报
回复
对PF最好能有伪代码的表示。

> 1、PF分配与位图大小相同的buffer,把整个位图调整后存放在buffer中待用,然后,循环打印内容。

在这种做法里,对于不同大小的位图,PF中的buffer的大小是一样的还是不同的?这个buffer是根据位图大小来定的,还是根据打印机一次打印的最大数据量来定的?

这两种做法分配内存的方式是否相同,即在堆上还是在栈上分配?buffer是否总是能够容纳整张位图的数据,或者需要多次分配?

另外,位图数据调整是在PF里进行的还是PF外面进行的?还有,最常见的情况是哪一种:第一,经常批量打印连续d 许多位图;第二,偶尔打印单张位图。
snow_haoxue 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hhyttppd 的回复:]
末看懂你的意思,UP
[/Quote]
位图的数据不能直接用于打印机,之间有差别,需要调整,在不改变位图本身数据的同时调整数据然后打印,一种方法是分配一个足够大的空间,存放调整好的数据,循环打印(一次打印数据量有限);一种方法是分配一个较小的空间(一次打印的最大数据量),循环调整数据和打印

针对同一张位图,两种方法打印次数相同、调整数据次数相同、分配内存大小不同

希望选用时间比较短的那一个
hhyttppd 2008-12-03
  • 打赏
  • 举报
回复
末看懂你的意思,UP

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧