DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 862974265
今日帖子: 40
在线用户: 23
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/6/16 19:55:01
标题:
MM大比拼 谁厉害? 浏览:2183
加入我的收藏
楼主: 还有更厉害的吗?
此帖子包含附件:
PNG 图像
大小:92.3K
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 fgrcwp (风之语) ★☆☆☆☆ -
盒子活跃会员
2018/6/17 8:20:17
1楼: 那个BrainMM和TCMalloc之类的在delphi中怎么使用?
----------------------------------------------
-
作者:
男 dawnhawk (dawnhawk) ★☆☆☆☆ -
盒子活跃会员
2018/6/18 13:56:27
2楼: BrainMM->Demos->lib下有好几个MM的文件:FastMM/IntelTBB/MSHeap/SAPMM/ScaleMM2/TCMalloc。
把对应的文件放在DPR单元的第一位就可以了,以ScaleMM为例:
program <YourApp>;

uses
  ScaleMM2 in '<yourpathscalemmpath>\ScaleMM2.pas',
  ...
----------------------------------------------
-
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2018/6/19 8:27:06
3楼: 不是官方自带的,能靠谱么?
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/6/19 10:06:11
4楼: BrainMM 真不错。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2018/6/19 10:16:55
5楼: program TestFastMM;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.Diagnostics,
  System.TimeSpan,
  System.SysUtils,
  System.Classes,
  System.Generics.Collections,
  Winapi.Windows;

type
  TTestThread = class(TThread)
  public
    procedure Execute; override;
  end;

var
  Stopwatch: TStopwatch;
  Elapsed: TTimeSpan;
  ThreadList: TList<TThread>;
  Threads: array of TTestThread;
  iGlobal: Integer;

const
  C_StrL = 16351;
  { TTestThread }

procedure TTestThread.Execute;
var
  CurrentStringList: TStringList;
  i: Integer;
  CurrentString: string;
begin
  CurrentStringList := TStringList.Create;
  try
    for I := 1 to 1571000 do
    begin
      SetLength(CurrentString, Random(C_StrL));
      SetLength(CurrentString, 0);
      CurrentStringList.Add(IntToStr(Random(i)) + 'bob' + IntToStr(Random(i)));
    end;
  finally
    CurrentStringList.Free;
  end;
end;

begin

  try
    Stopwatch := TStopwatch.StartNew;

    SetLength(Threads, 40); // highly parallel
    ThreadList := TList<TThread>.Create;
    try
      for iGlobal := Low(Threads) to High(Threads) do
      begin
        Threads[iGlobal] := TTestThread.Create;
        ThreadList.Add(Threads[iGlobal]);
      end;

      while ThreadList.Count > 0 do
      begin
        if ThreadList[0].WaitFor = WAIT_OBJECT_0 then
        begin
          CloseHandle(ThreadList[0].Handle);

          ThreadList.Delete(0);
        end;
        Sleep(10);
      end;
    finally
      ThreadList.Free;
    end;

    Elapsed := Stopwatch.Elapsed;
    Writeln(Format('FastMM took %n milliseconds', [Elapsed.TotalMilliseconds]));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

  ReadLn;
end.
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2018/6/19 10:18:51
6楼: 这是网上测试多线程内存的例子,我的机32下BrainMM下有错
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/6/19 10:21:42
7楼: 按此在新窗口浏览图片
楼上的 为啥不用 英特尔 或者 谷歌的 非要用 BrainMM ?
只是抛个砖而已..
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 qmm_admin (qmm) ▲▲▲▲△ -
普通会员
2018/6/19 11:35:16
8楼: scalemm2,里面是有鼐challenge benchmars程序,里面有一堆的测试场景,并比较各个MM,根据测试场景,设置相应的权重及占比分数,最后得到某一MM的得分。

总体得分是:fastmm的avx分支版本
速度快的是TC,scalemm(TBB未测试)
内存占用最小,我测试的是topMM

你们那点测试代码和场景太小,还不说是某MM在某项测试结果
此帖子包含附件:qmm_admin_2018619113514.rar 大小:2.12M
----------------------------------------------
-
作者:
男 qmm_admin (qmm) ▲▲▲▲△ -
普通会员
2018/6/19 11:37:25
9楼: 8楼的附件是MM benchmark,我之前有修改,有减少了些测试场景
原来的文件是从scalemm(请从githum找)目录下有个challenge找

注:benchmark只支持32位,没有64位的测试,因为里面很多是32位asm
----------------------------------------------
-
作者:
男 qmm_admin (qmm) ▲▲▲▲△ -
普通会员
2018/6/19 11:38:21
10楼: BrainMM 是还未稳定的,注意,我用它来跑这个测试是跑不过去的,写信给作者,也是回:未稳定,有BUG的
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2018/6/19 14:26:10
11楼: TBB我测了,win32、多线程下,加载4k字段,3千条记录,然后zip压缩,比fastmm慢4倍,且内存占几倍
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2018/6/19 14:34:51
12楼: 多线程下,我之前对tbb期望很噶,但用了下,在某些情况,感觉很慢。还是fastmm,scalemm很可靠,美中不足scalemm少了内存泄露检测,
----------------------------------------------
-
作者:
男 qmm_admin (qmm) ▲▲▲▲△ -
普通会员
2018/6/19 16:08:53
13楼: 可以试下QMM,有简单的泄露检查及少量字节的内存越界的检测
----------------------------------------------
-
作者:
男 qmm_admin (qmm) ▲▲▲▲△ -
普通会员
2018/6/19 16:17:15
14楼: 泄露检查开关:
工程中设置宏:DEBUG(即DEBUG环境下),并ReportMemoryLeaksOnShutdown=true,则:
在程序退出后,如出现泄露,会产生一个文件:(yourapp).leak.txt
里面有个:QMM.如何查找内存泄露.txt,自行操作。

内存越界的检测:
1:工程中设置宏:DEBUG(即DEBUG环境下)

2:设置最大越界长度变量:suffix_mem_check 
   默认为:sizeof(Pointer)*4
   值越大,表示检查越多,性能会相对影响,但可能越界的问题可能性会的更多点

  // memory check size(after address)
  // NOTE: must be align sizeof(Pointer)
  suffix_mem_check = sizeof(Pointer) * 4;
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2018/6/19 19:53:22
15楼:   stack trace: $2513BF6 -> $251E69B -> $2524157 -> $251562A -> $772E919F -> $7779A8CB -> $7779A8A1 -> $0
QMM 这个数据可以选择生成 (好像JCL有提供这样的功能) MAP 然后查吗?按此在新窗口浏览图片
总的来说没FASTMM直观..
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行97.65625毫秒 RSS