hotfox使用Hoard

原创 2013年12月05日 00:51:35

1.关于Hoard

Hoard是一款快速,高效利用内存的的内存分配器,可以提高应用的运行速度.而且不需要修改应用代码.
Hoard is a fast, scalable, and memory-efficient memory allocator that can speed up your applications. It’s much faster than built-in system allocators:as much as 2.5x faster than Linux, 3x faster than Windows, and 7x faster than Mac. No source code changes necessary. Cross-platform: works on Linux,Solaris, Mac OS X, and Windows.

.官方站点
http://www.hoard.org/
.如何编译与使用的文档
http://people.cs.umass.edu/~emery/hoard/building.html

使用的目的:
.提高内存分配速度:减少UMX消息包的处理时间(如生成时间)
.提高内存使用效率: 降低应用对内存峰值的要求(减少系统内存碎片)

2.编译Hoard(的经历)


Hoard代码的目录为$(HOARDSRC)
cd $(HOARDSRC)
192.168.1.160上同时有vc6和vs2005的环境,系统环境变量默认情况下是使用vc6.
cl版本为:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

现在需要在vs2005下编译Hoard.cl版本为:
$(VSINSTALLDIR)>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

以下确保使用vs2005编译.
set path=C:\Program Files\Microsoft Visual Studio 8\VC\bin;%path%
set lib=C:\Program Files\Microsoft Visual Studio 8\vc\lib;%lib%
set include=C:\Program Files\Microsoft Visual Studio 8\vc\include;%include%
set path=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;%path%

否则,会出现编译链接错误.(具体错误略)
如果不设置path,则cl会提示"没有mspdb80.dll".该文件位于$(VSINSTALLDIR)\Common7\IDE目录中.

编译hoard
compile-winhoard.cmd

编译成功后在$(HOARDSRC)目录下生成以下所需的文件:

.winhoard.dll

.winhoard.lib

.usewinhoard.obj

3.编译hotfox


先要编译ACE 5.4,Xerces-C 2.8的Release版本.(zlib,openssl已经编译)

.hotfox Release版本配置
配置名称:32_END_POINT_Release
输出文件:.\bin\hotfox.exe

.使用Hoard的hotfox版本
配置名称:use_hoard_release
输出文件:.\bin/use_hoard_hotfox.exe
附加依赖项:usewinhoard.obj winhoard.lib

4.测试及结论

4.1测试

使用xbox插件对Hoard的使用情况进行对比测试.
简单的测试逻辑:
测试得到生成相同的UMX消息包,对比时间及所需要的内存的数据。(测试数据为24列,500000条记录)

xbox测试代码如下:
int CXboxPlugin::Test3() {
    int k = 0;
    do {
        clock_t begin = clock();
        CMsg *msg = new CMsg;
    CRowset *prs = new CRowset;
        msg->AddRowset(prs);
        int fld_num = 24;
        int rec_num = 500000;
        for (int i=0;i<fld_num;i++) {
            char col_name[32];
            sprintf(col_name,"col%d",i+1);
            prs->AddField(col_name);
        }

        for (int i=0;i<rec_num;i++) {

            char value[] = "ddddddd";
            prs->AddRecord();
            for (int col=0;col<fld_num;col++) {
            prs->SetFieldValue(col,value);
            }
        }

        double duration = (double)(clock()-begin)/CLOCKS_PER_SEC;
        nlogger_->log(LO_STDOUT|LO_FILE,SEVERITY_INFO,"%d:耗时:%.2f秒.\n",k,duration);
        k++;
        if (k>1000)
            break;
        msg->Release();
    }while (1);

    return 0;
}

$(BIN)="..\..\..\..\可执行文件\服务端"

首先需要编译lssdk的Release版本.(lssdk又依赖Xalan-C).

lssdk Release的工程属性:

.输出文件:.$(BIN)\release\lssdk.dll

.导入库:..\..\lib\release\lssdk.lib

.忽略特性库:msvcrtd.lib

然后,编译xbxo.dll.

测试结果:

   耗时(秒) 内存(M)
不使用Hoard( hotfox.exe) 7.0 在160~710之间变动
使用Hoard( use_hoard_hotfox.exe) 3.3 稳定在500

在调试xbox时出现以下错误

HEAP[hotfox.exe]: Invalid Address specified to RtlFreeHeap( 00DF0000, 02B42AB0 )
Windows 已在 hotfox.exe 中触发一个断点。

其原因可能是堆被损坏,这也说明 hotfox.exe 中或它所加载的任何 DLL 中有 bug。

输出窗口可能提供了更多诊断信息

发现是xbox的编译选项是/MT,修改为/MD后问题解决.解释如下:
The _CrtIsValidHeapPointer function is used to ensure that a specific memory address is within the local heap. The local heap refers to the heap created and managed by a particular instance of the C run-time library. If a dynamic-link library (DLL) contains a static link to the run-time library, it has its own instance of the run-time heap, and therefore its own heap, independent of the application's local heap.

4.2结论

.使用Hoard后,内存操作速度提高了,对内存峰值的要求降低了.

5.发布

发布时需要增加winhoard.dll



深入Linux的内存管理,关于PTMalloc3、Hoard和TCMalloc

原文地址:http://blog.csdn.net/littlefang/article/details/6052058

深入Linux的内存管理,关于PTMalloc3、Hoard和TCMalloc

Linux中malloc的早期版本是由DougLea实现的,它有一个重要问题就是在并行处理时多个线程共享进程的内存空间,各线程可能并发请求内存,在这种情况下应该如何保证分配和回收的正确和有效。Wolf...

hotfox(gyb v2.6)增强

数据库连接池修改 1.允许一个线程获取一个以上的连接: 默认情况下,线程路径上的任何函数,操作同一个数据源使用的是同一个连接对象。 但有时可能有特殊的需要. 如在处理单据,需要写入SEMQ时,...
  • wherwh
  • wherwh
  • 2011年04月26日 01:35
  • 303

hotfox数据库连接池测试

1.目的 初步测试与验证连接池的行为.--待扩充 源于一个不正常的日志记录:似乎表现为一个连接仅被固定的线程使用.---从测试结果看不是机制本身,可能是使用的原因. 2.测试代码 int CXboxP...
  • wherwh
  • wherwh
  • 2015年01月04日 14:47
  • 417

基于hotfox的客户端的结构

1.简述 hotfox是程序框架,由插件提供具体的应用入口,登录实现和业务主窗口. 具体的应用业务逻辑由相应的插件实现。 Frame1是一个常见的应用模式的实现插件. logina是一个风格简单的...
  • wherwh
  • wherwh
  • 2013年10月25日 20:58
  • 556

plsql 使用教程

  • 2017年12月15日 13:47
  • 261KB
  • 下载

使用python发送qq消息

以前看到网上一些小程序,在处理完事物后会自动发送qq消息,但是一直搞不懂是说明原理。也在网上找过一些python登陆qq发送消息的文字,但是都太复杂了。今天偶然看到一篇文章,是用python调用win...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hotfox使用Hoard
举报原因:
原因补充:

(最多只允许输入30个字)