Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65699
  • 博文数量: 13
  • 博客积分: 1692
  • 博客等级: 上尉
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-29 20:42
文章分类

全部博文(13)

文章存档

2011年(1)

2010年(1)

2009年(7)

2008年(4)

我的朋友
最近访客

分类: C/C++

2009-05-09 02:51:45

  毕业论文初稿已搞定,但对毕业设计中做的软件还不甚满意。5月8号下午刚实现了读取DICOM文件并转换成8-bit 的BMP文件,还只针对Transfer Syntax UID为1.2.840.10008.1.2的dicom文件。1.2.840.10008.1.2、1.2.840.10008.1.2.1和1.2.840.10008.1.2.2的文间均为未经压缩的Raw Data文件,实现三者的读取转换不难。在程序中采用了fread()和fwrite()函数采集dicom像素和写入bmp像素,边采集边写入个人感觉比较慢,于是又想到了一种方法(前一种方法记为方法1,这种方法记为方法2),先把dicom的所有像素数据读入内存,然后在内存中处理像素值,可能这样会快一点。
  为了比较两种方法的效率,上网查了clock()函数的用法并应用到程序中,结果发现方法2只比方法1快了16millisecond,这让我有一点疑惑。后来突然想到可能是fopen等缓冲文件系统操作函数的特点决定的。缓冲文件系统在读文件时就为该文件开辟了一个缓冲区,以后所有的读取文件中的数据操作均是在该缓冲区中进行,当然可能会因为缓冲区的大小而不会一次就能够读入一个文件。而open等非缓冲文件系统操作函数是直接对磁盘进行读写操作,没有缓冲区,每一次读数据均涉及直接读写磁盘。
  通过上述我终于明白为什么用方法2在速度上并不占优势,快了16millisecond可能是因为是用直接操作读取像素数据,而在方法1种每次读一个像素还要调用fread()函数而消耗了时间。
  本次学习、加深了两个内容:用clock()可以得到程序(或函数,或代码块)的运行时间;复习了C语言中的缓冲文件系统和非缓冲文件系统的区别。下面是clock()函数的一般使用方法,以供备忘:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    clock_t clock_start, clock_end;
    clock_start = clock();
    
    /*codes*/
    .....
    
    clock_end = clock();
    printf("\nProgram Running Time: %d ms\n", (clock_end - clock_start));

    return 0;
}

阅读(1552) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~