Afraid there's no switch :) On Mon, Oct 15, 2018 at 9:50 AM Richard Sloggett <[email protected]> wrote:
> Hello, > > > > Thanks for getting back to me, and for the tips on using the Has.. > properties – I will certainly do that. > > > > Is there a setting built in to switch from an in memory byte array to > reading from disk, or is that something I would need to do implement in a > custom build of cecil? > > > > Richard > > > > *From:* [email protected] <[email protected]> *On > Behalf Of *Jb Evain > *Sent:* 15 October 2018 17:42 > *To:* [email protected] > *Subject:* Re: [mono-cecil] Memory tips > > > > Hey Richard, > > > > Thanks for the kind words, always glad to read that Cecil is useful! > > > > I don't think there's anything built-in that will help you more. Most > metadata is lazy loaded on demand, so if you're using only a subset you > should not consume too much memory. One useful pattern is to always use the > HasN properties before accessing the N collection. > > > > For instance: > > > > if type.HasMethods > > foreach (var m in type.Methods) > > ...; > > > > This prevents allocating empty collections if there's no methods in there. > > > > If you want to dive into the internals, the parts of the binary that > contains the metadata information (the heaps, > https://github.com/jbevain/cecil/blob/master/Mono.Cecil.PE/ImageReader.cs#L367) > will indeed be loaded in memory as a byte[] for fast access. > > > > If you're very memory constrained you can change Cecil to always read on > disk but you'll see a lot of seeking which is likely going to be slowish. > > > > Jb > > > > > > > > On Fri, Oct 12, 2018 at 8:59 AM rsuk <[email protected]> wrote: > > Firstly, a huge thank you - mono.cecil has been hugely useful and clearly > you have invested a massive amount of work on it over the years. > > > > I have completed an initial set of development using mono.cecil; using it > only for inspecting type information, not generating assemblies, reading > .pdb etc. I'm wondering if you might be able to offer any tips on reducing > the memory usage? I have been experimenting with different reader > parameters and have currently settled on: > > > > InMemory = false, > > ReadWrite = false, > > ReadSymbols = false > > > > We only use a fairly small subset of the properties available on the > TypeReference, TypeDefinition etc., so I'm wondering if you might have any > tips on how we might be able to minimize memory usage once we have loaded > all the required AssemblyDefinitions; i.e. I'm wondering if it might be > possible to discard some data held behind the scenes that might not be > necessary in an inspection only scenario. Not necessarily looking for > anything built in, maybe something we could implement in our own code to > "prune" the object graph somehow to reduce the overall memory footprint. > > > > One thing we have observed is that a large number of byte arrays are held > in memory - does mono.cecil hold the raw metadata in memory and query on > demand, or could this be data that is being held in memory for some other > purpose - i.e. manipulating and writing assemblies. I wonder if might be > possible to somehow remove that once we have completed the initial > population of the objects? > > > > Thanks for any pointers or tips you might be able to offer - much > appreciated. > > > > Richard > > -- > -- > -- > mono-cecil > --- > You received this message because you are subscribed to the Google Groups > "mono-cecil" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > > -- > -- > -- > mono-cecil > --- > You received this message because you are subscribed to the Google Groups > "mono-cecil" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > > -- > -- > -- > mono-cecil > --- > You received this message because you are subscribed to the Google Groups > "mono-cecil" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- -- mono-cecil --- You received this message because you are subscribed to the Google Groups "mono-cecil" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
