背景:
要录像,数据从网络上接收,写数据帧,每帧100字节-140K不等,每秒约有20帧;
一台机器要同时录1-64个这样的文件。
问题:
现在有两个方案,
1 接收1帧写入磁盘一帧,这样案平均算,每秒要访问磁盘32*20次
2 接收数据帧后,先放在内存,等达到一定的长度(如1M)再写入磁盘,这样每秒访问磁盘的次数可能不到1,但每次写入的时间较长大家评价一下这两种方法,或者有没有其它可先方案.
要录像,数据从网络上接收,写数据帧,每帧100字节-140K不等,每秒约有20帧;
一台机器要同时录1-64个这样的文件。
问题:
现在有两个方案,
1 接收1帧写入磁盘一帧,这样案平均算,每秒要访问磁盘32*20次
2 接收数据帧后,先放在内存,等达到一定的长度(如1M)再写入磁盘,这样每秒访问磁盘的次数可能不到1,但每次写入的时间较长大家评价一下这两种方法,或者有没有其它可先方案.
你不再需要考虑顶楼的问题.
2.可以考虑使用Overlapped模式异步写入。相对效率会更高一点。
IOCP和异步写文件我还没有用过呢,只用过WriteFile、fwrite写过简单的文件,
能不能更多点提示啊
网上包括SDK示例,基本上以操作Socket的示例为主,写文件是一样的。不同的只是一个用SOCKET,另一个使用文件HANDLE
DWORD written_bytes; OVERLAPPED Overlapped;
Overlapped.Offset = nat8_low_part(pos);
Overlapped.OffsetHigh = nat8_high_part(pos);
Overlapped.hEvent = NULL;
return WriteFile(fd, buf, size, &written_bytes, &Overlapped)
? size == written_bytes ? ok : end_of_file
: get_system_error(); } else {
return not_opened;
}