Which metadata do you need exactly? ICSharpCode.NRefactory.TypeSystem provides a view on the types and members in an assembly, and can be initialized using CecilLoader. When loading the public types/members (using CecilLoader.IncludeInternalMembers=false, which is the default) from the following assemblies (the default references is a new WPF project): - mscorlib - System - System.Core - System.Data - System.Data.DataSetExtensions - System.Xml - System.Xml.Linq - PresentationCore - PresentationFramework - WindowsBase - System.Xaml
NRefactory 5 takes only 14 MB of memory with all of these loaded (and when also including internal/private members: 32 MB), and I have some ideas on how to reduce this even further. You can also speed up the load time by serializing the type system - loading this set of assemblies and copying the info from Cecil to NR.TypeSystem takes 2 seconds, but deserializing a cached copy of the type system using NR's FastSerializer takes only 0.25 seconds. The downside is that you don't get all the information from an assembly - e.g. it's missing the method bodies. But pretty much everything else is present - types, methods, fields, properties, events, parameters, custom and non-custom attributes, security declarations, constant values, etc. You can find NRefactory on https://github.com/icsharpcode/NRefactory/ Daniel On 9/14/2011 01:40, Greg Young wrote: > To be clear, I can patch to not use the LOH pretty quickly and easily > its the everything gets held in memory part thats a bit of an issue we > really only need the metadata and it seems that getting the metadata > copied over will be a pretty involved task. > > On Tue, Sep 13, 2011 at 7:37 PM, Greg Young <[email protected]> wrote: >> I know I have put up some discussion about this in the past but is >> there anyway (possibly something new) to lower cecil's memory usage? >> >> I have looked at copying over cecil objects and it would be a pretty >> major task. The alternative is to make cecil objects as short lived as >> possible. Basically what we want is to only hold all of the metadata >> that is provided and none of the code. We have already taken the easy >> mechanism of setting MethodBodys to a new MethodBody after reading >> them but the module still holds the whole assembly in the LOH. >> >> Greg >> >> -- >> Le doute n'est pas une condition agréable, mais la certitude est absurde. >> >> -- >> -- >> mono-cecil > >
signature.asc
Description: OpenPGP digital signature
