一、安装中的坑
从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 是微软 .NET 的开源实现,自从 .NET 出现以后,微软就把他新研究出来的编程语言 C# 和 .NET 的公共语言基础结构(Common Language Infrastructure,CLI)交给了 ECMA(欧洲计算机制造商协会)管理,而后来 CLI ...
通过深入研究Mono 2.4的源码,开发者不仅可以增强对.NET框架的理解,还能获得关于编程语言、运行时环境、类库设计、跨平台技术等多个方面的宝贵知识。这对于提升自己的软件开发能力,尤其是对于那些希望在开源社区...
10. **案例研究与最佳实践**:书中可能包含实际项目案例,展示如何在不同场景下有效利用MONO进行开发,并分享了一些最佳实践。 尽管《MONO 开发手册》可能不是最新的资源,但其对MONO的基本概念和早期版本的详细...
Mono是一个开源的.NET框架,它实现了微软的.NET Framework的大部分功能,使得.NET应用程序可以在Linux、macOS以及...通过学习和实践,你将逐渐掌握 Mono 开发的基本技巧,为今后深入研究.NET跨平台开发打下坚实的基础。
VINS-Mono是一种视觉惯性导航系统(Visual-Inertial Navigation System),它是SLAM(Simultaneous Localization and Mapping)领域中的一个重要实现。SLAM是指机器人在未知环境中同时进行自我定位和环境建图的过程...
Mono for Android是Xamarin公司开发的一个跨...综上所述,"mono for android官方示例程序"是学习和实践使用C#开发Android应用的宝贵资源,通过深入研究这些示例,开发者能够掌握Mono for Android的基本用法和最佳实践。
Mono for Android 是一...通过深入研究这些代码,你可以更深入地了解如何在实际项目中应用这些控件,以及如何在Mono for Android环境中进行开发。这不仅有助于提升你的Android编程技能,还能让你掌握跨平台开发的技巧。
VINS-Mono代码注释以及公式推导
VINS-Mono的源代码是公开的,这为研究者和开发者提供了深入理解SLAM算法的机会。详细的代码注释有助于初学者快速理解算法流程和实现细节。 通过理解和学习VINS-Mono的代码,可以深入了解SLAM算法,尤其是视觉惯性...
ubuntu mono apache mysql 安装指南 各种安装问题研究总结
本文在VINS-MONO开源系统的基础上抛弃IMU中的加速度计,用轮式里程计替代加速度计提供位移信息,重新设计系统在线初始化的策略。因为陀螺仪和轮式里程计的测量采用了预积分理论,本文推导了预积分的过程...
VINS-Mono是一种视觉惯性导航系统(Visual-Inertial Navigation System),它是基于单目...理解和研究这个代码注释,可以帮助开发者深入理解视觉惯性导航的原理,并应用于无人机、机器人或其他需要自主导航的系统中。
这几天看了很多关于脱离框架运行C#程序的文章,千篇一律,都是讲飞信方案的,此方案涉及一些法律问题,只能自己研究一下,后来用google美国网站搜了一把,看了些文章,无意中发现mono,又用mono关键字到google中国搜...
总的来说,VINS-Mono的点线优化是视觉SLAM领域的重要研究方向,它在实时单目视觉定位中发挥着核心作用。通过对"小海要自强+VINS-Mono-Optimization-master.zip"的深入学习和实践,我们可以掌握这一技术,并将其应用...
在本文中,我们将深入探讨如何使用C#和Mono for Android框架来开发一个简单的...通过研究这个项目,开发者不仅可以掌握C#在移动开发中的应用,还能了解如何与不同的API交互,以及如何在Android上构建用户友好的界面。
VINS-Mono不仅适用于学术研究,也适合于实际应用,如无人机自主飞行、自动驾驶汽车定位等。通过理解和学习VINS-Mono的源码,开发者可以深入理解视觉惯性导航系统的原理,为自己的项目提供强大的基础。在实践过程中,...
### VINS-Mono详解 ...通过对IMU预积分、视觉处理前端、系统初始化以及后端优化等关键技术点的详细介绍,我们可以更深入地理解该算法的工作原理和实现细节,这对于进一步研究和改进VIO算法具有重要意义。
- **Mark Mamone**:本书作者,是一位资深的软件开发者和技术作家,专注于.NET技术和开源解决方案的研究。 - **Jason Gilmore**:本书的编辑负责人,也是著名的技术作家和编辑,拥有丰富的编辑经验。 - **Marcus ...
VINS-Mono是一款基于视觉惯性导航系统的单目实时定位与建图(Visual-Inertial Odometry and Mapping,简称VIO)开源软件。...对于希望深入研究VIO和SLAM的开发者来说,VINS-Mono是一个极好的学习资源。
对于开发者来说,深入研究“mono-master”这个文件夹,他们可以了解到Mono的内部工作原理,学习如何扩展和定制Mono以满足特定需求,或者为项目贡献代码。 Mono的组成部分包括: 1. **MCS**:这是Mono的C#编译器,...