社区
进程/线程/DLL
帖子详情
快速建立预定大小的多个文件
chenshi999
2002-12-13 09:56:13
遇到一个软件,可以在10秒之内,建立一个目录,在目录下建立一系列的
以数字命名的文件,每个文件64M,总共超过10G文件。每个文件初始化为0字符,那位大哥知道其原理,能否提个醒,思路也可。最好能用普通的C++语言就可以实现。
此软件特征:2000下运行,短时间CPU能完全利用(98%),能用进度控件表示进度。每个文件都被初始化。进程优先级为标准,单线程
我的运行环境:PIII 866,256MB RAM,WIN2000Server
...全文
70
25
打赏
收藏
快速建立预定大小的多个文件
遇到一个软件,可以在10秒之内,建立一个目录,在目录下建立一系列的 以数字命名的文件,每个文件64M,总共超过10G文件。每个文件初始化为0字符,那位大哥知道其原理,能否提个醒,思路也可。最好能用普通的C++语言就可以实现。 此软件特征:2000下运行,短时间CPU能完全利用(98%),能用进度控件表示进度。每个文件都被初始化。进程优先级为标准,单线程 我的运行环境:PIII 866,256MB RAM,WIN2000Server
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenshi999
2003-01-16
打赏
举报
回复
楼上仁兄,有眉目?
可否传情与我?
icansaymyabc
2003-01-14
打赏
举报
回复
哈哈哈
chenshi999
2003-01-08
打赏
举报
回复
没有,就一个线程。哎,兄弟我在线等待,我现在在找黑客软件!!!
DoItFreely
2003-01-08
打赏
举报
回复
难道是……创建了N个线程同时都设置为实时级别一起下手?
哇,这样的程序好象比盐湖城的蝗虫还厉害哟~~~
chenshi999
2003-01-08
打赏
举报
回复
SetFilePointer,SetEndOfFile使用的确会清0的。建立一个文件或几个文件速度都能很快。我现在是想建立成百上千的文件,希望有很快的速度。根据我的观察,这个软件在建立上千个文件的时候,短时间内CPU的利用率达98%,
并一直持续到建立文件结束,没有驱动的影子。而我采取最高级别的进程优先级,CPU也只能占4%左右,并且运行一会儿就会受调度影响。反观那个软件,是狂占CPU,当然比较快了。还有这个软件在2000/NT中,如果失去管理员权限就和我写的一样慢了。
chenshi999
2003-01-08
打赏
举报
回复
韩国一家公司的IDR2016的硬盘录象。我对其的数据存储部分很感兴趣
wormie4evr
2003-01-08
打赏
举报
回复
那个软件叫什么?
In355Hz
2003-01-07
打赏
举报
回复
恩?我用 SetEndOfFile 发现没有清 0,然后自己又手工去清~
我的系统是 Win98,可能和 NT/2000 表现不一样
如果 SetEndOfFile 自动清的话,估计 FILE_FLAG_NO_BUFFERING 要去掉,手工清零如果用这个标志,速度减慢很多~
wormie4evr
2003-01-07
打赏
举报
回复
In355Hz 你用 ntfs 的吗? 那倒有可能 1 秒内建 1G 空文件.
wormie4evr
2003-01-07
打赏
举报
回复
In355Hz: SetEndOfFile 自动清零的.
希望不要夸张, 你的代码 64M 要 2 秒.
chenshi999 你还有什么问题? 用 mmf 或 In355Hz 的方法都是理论上最快的用户级码, *不可能* 比那个软件慢.
chenshi999
2003-01-06
打赏
举报
回复
非常感谢各位大大的热心帮助。但是以上的各种方法我都试过。建立一个或很少的文件,都很快。但是在一段时间里,建立多个文件时,系统会更换时间片。现在的问题点是如何防止CONTEXT SWITCH,在认为没完成前,占有CPU的绝大部分工作时间。
chenshi999
2003-01-06
打赏
举报
回复
这个办法我也用过,速度不能有多大变化,运行一小会儿,系统的优先
等级就体现不出来。
In355Hz
2003-01-06
打赏
举报
回复
可以暂时动态提高进程/线程的优先级,参考 SetPriorityClass 和SetThreadPriority 两个函数:
Thread\Process: Idle Below Normal Above High Realtime
Critical 15 15 15 15 15 31
Highest 6 8 10 12 15 26
Above 5 7 9 11 14 25
Normal 4 6 8 10 13 24
Below 3 5 7 9 12 23
Lowest 2 4 6 8 11 22
Idle 1 1 1 1 1 16
比如用以下代码暂时调整线程优先级为24:
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
... // 写文件
SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
In355Hz
2003-01-05
打赏
举报
回复
建立文件可以很快,CreateFile + SetFilePointer + SetEndOfFile, 1G 的文件都 <1s,关键是清零,我试验的代码很简单 CreateFile + loop WriteFile,用一个 ZeroMemory 过的 Buffer 写入,用于 WriteFile 的 Buffer 越大,速度就越快,BufferSize = 64k 的时候就相当快了 (<1s)。
CreateFile + SetFilePointer + SetEndOfFile 的代码(去掉了错误处理):
const DWORD dwFileSize = (DWORD)0x4000000;
HANDLE hFile = CreateFile(TEXT("F:\\Data.bin"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);
SetFilePointer(hFile, dwFileSize, NULL, FILE_BEGIN);
SetEndOfFile(hFile);
CloseHandle(hFile);
CreateFile + loop WriteFile 的代码:
const DWORD dwBufferSize = (DWORD)0x10000;
const DWORD dwFileSize = (DWORD)0x4000000;
HANDLE hFile = CreateFile(TEXT("F:\\Data.bin"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
LPVOID pvBuffer = new BYTE[dwBufferSize];
ZeroMemory(pvBuffer, (DWORD)dwBufferSize);
for (int i = 0; i < dwFileSize; i += dwBufferSize)
{
DWORD dwBytesToWriten = 0;
WriteFile(hFile, pvBuffer, dwBufferSize, &dwBytesToWriten, NULL);
}
delete[] pvBuffer;
CloseHandle(hFile);
wormie4evr
2003-01-04
打赏
举报
回复
搞笑? CreateFile怎么行.
在当前目录生成 64M 的 a.dat: (看看是不是比那个软件慢 :-)
HANDLE hfile = CreateFile("a.dat", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hmm = CreateFileMapping(hfile, NULL, PAGE_READWRITE, 0, 0x4000000, NULL);
CloseHandle(hmm);
CloseHandle(hfile);
chenshi999
2003-01-03
打赏
举报
回复
产生文件这些都能实现,关键是速度和CPU的短时间高效独占利用!
Hawk_lp
2002-12-31
打赏
举报
回复
具体的细节没写!
在网吧,没法帖代码!!!!!!!!!!!!!!!!
Hawk_lp
2002-12-31
打赏
举报
回复
CreateFile()可以制定文件名
CString str;
for(int i = 0; i < 100 ; i++){
str.format("%d", i);
CreateFile(str,...)//以str为文件名,以CreateDirectory文件所在的文件夹
}
Hawk_lp
2002-12-31
打赏
举报
回复
1 建立文件夹 CreateDirectory() 有SDK函数的
2 CreateFile()放在循环中,一次在文件夹中创建多个文件,可以制定大小,
也可以先为空,后用WriteFile()将每一个文件写到64M
chenshi999
2002-12-19
打赏
举报
回复
真希望有朋友给我指一条光明之路,哪怕是一条思路也行!
我初步分析此软件是:
1.运行级别极高,但没有任何驱动的影子,只有一个20K大小的DLL.
2.对硬盘进行直接读写.或许只是在FAT分区做标志.
但如何取得在应用程序中取得RING0般的级别,望高手们多多指点
加载更多回复(5)
Windows下
快速
创建指定
大小
的空
文件
空
文件
除了做占位,还有其它妙用,需要你自己思考~
SOCKET编程之一个端口如何
建立
多个
TCP连接?(用fork子进程、select、poll、epoll都是可以的)一个端口最大支持
建立
多少个tcp连接?
文章目录文章1:不太清楚socket一个端口如何
建立
多个
tcp连接,这边转载一篇文章文章2:一台Linux服务器最多能支撑多少个TCP连接?结论:socket服务端只用开一个端口监听(listen)socket请求就行,理论上来说,最大...
通过Socket连接一次传输
多个
文件
可以一次传输一个或
多个
文件
。 在一次传输
多个
文件
时,遇到了一个困难:如何在接收
文件
时确定
文件
之间的边界。为了在接收端正确的拆分
文件
,在传输
文件
时需要传输每个
文件
的
大小
。 我采用了这样一种策略:首先...
海量数据处理:1G
大小
的一个
文件
中找出出现频率最高的100个数
有一个1G
大小
的一个
文件
,里面每一行是一个词,词的
大小
不超过16字节,内存限制
大小
是1M,要求返回频数最高的100个词 2.思考过程 (1)参见我的其他大数据面试题博文。此处1G
文件
远远大于1M内存,分治法,先hash...
oracle 给表空间增加
多个
数据
文件
当项目数据量大的时候,避免不了表空间不够用的情况,这个时候就需要挂载
多个
表空间
文件
,来进一步扩大容量。 下面演示一下,从创建表空间到绑定用户并赋权使用的全流程: PANDA是我的用户名 MYSPACE是表空间名称...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章