|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2017/4/26 7:40:21 |
标题: |
可不可以控制vcl桌面程序只能使用多少内存? |
浏览:1511 |
|
加入我的收藏 |
楼主: |
可不可以控制vcl桌面程序只能使用多少内存?
原因是因为用多线程批量处理大文件时,内存不断上升,用光了所有系统内存,所以想控制自己的程序只允许使用系统的80%内存,请问要怎么样实现?或是否还有更好方案?
----------------------------------------------
- |
作者: |
|
2017/4/26 9:50:21 |
1楼: |
你这个想法很独特,有前途, 不过我还是建议你检讨自己的算法。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
lsuper (lsuper) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/4/26 9:54:10 |
1楼: |
1、应当优先优化你的程序,譬如 windows MMF 处理文件或者多进程方式,每文件每进程 2、“只允许使用系统的 80% 内存”按照当前 windows docker 实现的原理,基于 windows Job 应该可以搞定(没用过,自己 gogo 吧)
----------------------------------------------
-
|
作者: |
lsuper (lsuper) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/4/26 9:56:30 |
2楼: |
刚刮了一下,JwaWinNT.pas 中有这个定义:JOB_OBJECT_LIMIT_PROCESS_MEMORY
搜了一个 C++ 的例子:http://blog.csdn.net/you_lan_hai/article/details/8521603/
----------------------------------------------
-
|
作者: |
yxsoft (yxsoft) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2017/4/26 19:58:46 |
3楼: |
大文件按流逐段处理即可
----------------------------------------------
Great!
|
作者: |
|
2017/4/26 23:23:12 |
4楼: |
不管你分了多少个线程去处理多个文件, 记住硬盘永远都只会串行地帮你去将数据一点点读取出来,
所以除非你处理数据的速度比读取硬盘还慢, 否则多线程操作不但不会增加性能反而会拖慢处理速度
对于楼主的情况最简单地处理方法就是用单线程(或者单个后台线程)一个一个文件去处理, 这样不但可以解决内存占用问题性能也会略微提高一点
----------------------------------------------
-
|
|