毕业论文初稿已搞定,但对毕业设计中做的软件还不甚满意。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) |