`
yuancihang
  • 浏览: 145403 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

mono研究

阅读更多

一、安装中的坑

从mono官网下载源码包mono-3.4.0.tar.bz2直接编译安装后,报错:

/usr/bin/install: cannot stat `targets/Microsoft.Portable.Common.targets': No such file or directory

进行以下操作,解决之:

#> cd ${MONO_SOURCE}/mcs/tools/xbuild/targets

#> cp Microsoft.Portable.CSharp_4.0.targets Microsoft.Portable.Common.targets

#> vi Microsoft.Portable.Common.targets

在vi中将Microsoft.Portable.Common.targets文件中的这行:

<Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" />删除,

然后保存退出。接着进入Mono的源码目录进行配置、编译、安装。

./configure 如果按默认参数配置则最大堆大小不能超过3GB,打开--with-large-heap=yes开关则可以超过3GB。 

./configure --with-large-heap=yes

二、关于MONO_GC_PARAMS

mono中的内存分为三块:nursery, major heap和large object space

nursery主要存放新生成的小对象和被pinned住的小对象

major heap是老年代,主要存放在gc中从nursery移过来的对象

large object space存放大于8K的对象,SGen-GC把大对象直接分配在操作系统的内存页上,垃圾回收时直接释放内存回操作系统

MONO_GC_PARAMS需要被设置成环境变量,多个参数用逗号隔开,可以使用以下参数

max-heap-size:最大堆大小

major:老年代垃圾回收策略,默认只使用单CPU进行垃圾回收,有以下值:`marksweep', `marksweep-conc', `marksweep-par', 'marksweep-fixed' or 'marksweep-fixed-par'

major-heap-size:老年代堆大小,默认为512M,该参数必须和major参数一起使用,单独使用会报错

minor:新生代垃圾回收策略,有以下值:`simple' or `split'

nursery-size:新生代大小,默认为4M,采用的是copying collection, 值必须是2的幂

soft-heap-limit:当内存使用小于该值会较少进行垃圾回收,大于该值则会有更多的垃圾回收次数

stack-mark:线程堆栈扫描策略。有两个值:precise,  conservative。SGen垃圾回收器默认使用precise

evacuation-threshold:内存碎片阈值。取值范围[0 - 100],默认66

wbarrier: 按照官方文档的说法, major collection会扫描整个堆,而nursery collection只会扫描新生代,为了避免冲突,需要追踪从老年代指向新生代的任何引用,mono支持两种数据结构来保持追踪:cardtable 和 remset。我在mono3.4上测试提示不识别wbarrier参数,奇怪了。。。

完整示例:

export MONO_GC_PARAMS=max-heap-size=6g,major=marksweep-par-fixed,major-heap-size=3g,nursery-size=1g,stack-mark=precise,evacuation-threshold=66

关于mono垃圾回收有两篇官方文档可以参考:

Generational GC:http://www.mono-project.com/Generational_GC

Working With SGen:http://www.mono-project.com/Working_With_SGen

 

三、关于mono性能分析

使用--profile选项可以产生性能监控日志:

mono --profile=log hello.exe

产生的日志非常大,我测试了几秒就产生了五百多兆的日志,可以加上nocalls选项去掉对方法调用的监控。

要想以上语句正常运行需要先设置环境变量:

export LD_LIBRARY_PATH=/opt/mono/mono34/lib

如果在程序中使用了P/Invoke导入dll,则还要设置环境变量:DYLD_LIBRARY_PATH

 

生成报告:

mprof-report output.mlpd

使用文本编辑器打开生成的output.report,性能报告有以下几个部分:

Mono log profiler data

JIT summary

GC summary

Allocation summary 按对象占用的内存大小从大到小进行排序

Method call summary 按方法调用的时间长短从大到小进行排序

Metadata summary

Exception summary

Thread summary 

关于mono性能分析有一篇官方文档可以参考:

Profiler:http://www.mono-project.com/Profiler

分享到:
评论

相关推荐

    mono编程初级入门

    Mono 是微软 .NET 的开源实现,自从 .NET 出现以后,微软就把他新研究出来的编程语言 C# 和 .NET 的公共语言基础结构(Common Language Infrastructure,CLI)交给了 ECMA(欧洲计算机制造商协会)管理,而后来 CLI ...

    mono2.4源码,了解.net

    通过深入研究Mono 2.4的源码,开发者不仅可以增强对.NET框架的理解,还能获得关于编程语言、运行时环境、类库设计、跨平台技术等多个方面的宝贵知识。这对于提升自己的软件开发能力,尤其是对于那些希望在开源社区...

    MONO 开发手册

    10. **案例研究与最佳实践**:书中可能包含实际项目案例,展示如何在不同场景下有效利用MONO进行开发,并分享了一些最佳实践。 尽管《MONO 开发手册》可能不是最新的资源,但其对MONO的基本概念和早期版本的详细...

    mono初级级入门.rar

    Mono是一个开源的.NET框架,它实现了微软的.NET Framework的大部分功能,使得.NET应用程序可以在Linux、macOS以及...通过学习和实践,你将逐渐掌握 Mono 开发的基本技巧,为今后深入研究.NET跨平台开发打下坚实的基础。

    VINS-Mono代码注释,仅供学习

    VINS-Mono是一种视觉惯性导航系统(Visual-Inertial Navigation System),它是SLAM(Simultaneous Localization and Mapping)领域中的一个重要实现。SLAM是指机器人在未知环境中同时进行自我定位和环境建图的过程...

    mono for android官方示例程序

    Mono for Android是Xamarin公司开发的一个跨...综上所述,"mono for android官方示例程序"是学习和实践使用C#开发Android应用的宝贵资源,通过深入研究这些示例,开发者能够掌握Mono for Android的基本用法和最佳实践。

    mono for android sample

    Mono for Android 是一...通过深入研究这些代码,你可以更深入地了解如何在实际项目中应用这些控件,以及如何在Mono for Android环境中进行开发。这不仅有助于提升你的Android编程技能,还能让你掌握跨平台开发的技巧。

    VINS-Mono代码注释以及公式推导

    VINS-Mono代码注释以及公式推导

    VINS-Mono代码详细注释

    VINS-Mono的源代码是公开的,这为研究者和开发者提供了深入理解SLAM算法的机会。详细的代码注释有助于初学者快速理解算法流程和实现细节。 通过理解和学习VINS-Mono的代码,可以深入了解SLAM算法,尤其是视觉惯性...

    ubuntu mono apache mysql 安装指南

    ubuntu mono apache mysql 安装指南 各种安装问题研究总结

    基于VINS-MONO的融合SLAM应用于自动驾驶的技术研究

    本文在VINS-MONO开源系统的基础上抛弃IMU中的加速度计,用轮式里程计替代加速度计提供位移信息,重新设计系统在线初始化的策略。因为陀螺仪和轮式里程计的测量采用了预积分理论,本文推导了预积分的过程...

    VINS-Mono代码注释.7z

    VINS-Mono是一种视觉惯性导航系统(Visual-Inertial Navigation System),它是基于单目...理解和研究这个代码注释,可以帮助开发者深入理解视觉惯性导航的原理,并应用于无人机、机器人或其他需要自主导航的系统中。

    mono脫離.net framework 運行的框架示例,

    这几天看了很多关于脱离框架运行C#程序的文章,千篇一律,都是讲飞信方案的,此方案涉及一些法律问题,只能自己研究一下,后来用google美国网站搜了一把,看了些文章,无意中发现mono,又用mono关键字到google中国搜...

    小海要自强+VINS-Mono-Optimization-master.zip

    总的来说,VINS-Mono的点线优化是视觉SLAM领域的重要研究方向,它在实时单目视觉定位中发挥着核心作用。通过对"小海要自强+VINS-Mono-Optimization-master.zip"的深入学习和实践,我们可以掌握这一技术,并将其应用...

    C#使用Mono For Android 制作的简单安卓天气查看源码

    在本文中,我们将深入探讨如何使用C#和Mono for Android框架来开发一个简单的...通过研究这个项目,开发者不仅可以掌握C#在移动开发中的应用,还能了解如何与不同的API交互,以及如何在Android上构建用户友好的界面。

    小海要自强+VINS-Mono-master.zip

    VINS-Mono不仅适用于学术研究,也适合于实际应用,如无人机自主飞行、自动驾驶汽车定位等。通过理解和学习VINS-Mono的源码,开发者可以深入理解视觉惯性导航系统的原理,为自己的项目提供强大的基础。在实践过程中,...

    VINS-Mono详解.pdf

    ### VINS-Mono详解 ...通过对IMU预积分、视觉处理前端、系统初始化以及后端优化等关键技术点的详细介绍,我们可以更深入地理解该算法的工作原理和实现细节,这对于进一步研究和改进VIO算法具有重要意义。

    practical mono

    - **Mark Mamone**:本书作者,是一位资深的软件开发者和技术作家,专注于.NET技术和开源解决方案的研究。 - **Jason Gilmore**:本书的编辑负责人,也是著名的技术作家和编辑,拥有丰富的编辑经验。 - **Marcus ...

    vins-mono源码

    VINS-Mono是一款基于视觉惯性导航系统的单目实时定位与建图(Visual-Inertial Odometry and Mapping,简称VIO)开源软件。...对于希望深入研究VIO和SLAM的开发者来说,VINS-Mono是一个极好的学习资源。

    dotnet-Mono开源ECMACLIC和NET实现

    对于开发者来说,深入研究“mono-master”这个文件夹,他们可以了解到Mono的内部工作原理,学习如何扩展和定制Mono以满足特定需求,或者为项目贡献代码。 Mono的组成部分包括: 1. **MCS**:这是Mono的C#编译器,...

Global site tag (gtag.js) - Google Analytics