DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: smallcoder
今日帖子: 30
在线用户: 12
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2020/1/11 1:26:43
标题:
一个菜鸟的菜鸟问题 浏览:232
加入我的收藏
楼主: 函数
function SplitStr2(const Source, Splitter: String): TArray<string>;
begin
  Result := Source.Split([Splitter]);
end;
调用
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  txt1: TStringList;
  s: string;
  StrArr: TArray<string>;
begin
  s := 'adsfafasdfasdfdsafdsafasdfasdf,asfdasdfasdfasdfasdf,asfdasdfasdfasdf,asdfasdfasfd';
  txt1 := TStringList.Create;
  try
    for i := 1 to 1000000 do
    begin
    //StrArr := s.Split([',']);
      StrArr := SplitStr2(s, ',');
      txt1.add(StrArr[0] + StrArr[1] + StrArr[2]);
    end;
  finally
    FreeAndNil(txt1);
  end;
  ShowMessage('完毕');
end;

2种不同方式
//StrArr := s.Split([',']);
      StrArr := SplitStr2(s, ',');
但是运行会有巨大的内存占用差距。

有点好奇为什么 希望解答
----------------------------------------------
-
作者:
男 a5824 (Return) ▲▲▲▲△ -
注册会员
2020/1/11 13:39:23
1楼: 没啥感觉啊,你加了100万个字符串,本来就会有运存的变动,加完之后,又释放,肯定会有个浮动
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2020/1/11 14:55:02
2楼: @a5824

我是说
//StrArr := s.Split([',']);
      StrArr := SplitStr2(s, ',');
这两种方式  波动不一样
一个可以到100M一个只有几十M
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2020/1/12 19:58:21
3楼: 额。没人解答吗
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2020/1/13 9:45:39
4楼: 楼主,请多试几次再下结论。你可以把ShowMessage移动到finally之前,然后你会发现内存占用大小都差不多。你以为不一样的波动只是Windows任务管理器刷新后的错觉。你这些测试代码所占用的内存主要是StringList占用的,和Split函数关系不大,像你这些封装到函数里再调用,区别是函数的调用框架会占用少数内存,但调完就释放了,对内存占用的影响微乎其微。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 chencong5025 (Nicosoft) ▲▲△△△ -
注册会员
2020/1/14 18:44:42
5楼: @iamdream
谢谢 的确是的

我是看到这个帖子
http://www.delphitop.com/html/zifuchuan/4952.html
 测试了一下 粗略的看了看 任务管理器  ,,,
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行46.875毫秒 RSS