Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/21/10 18:46:04 (14 years ago)
Author:
epitzer
Message:

Estimate or calculate StringBuffer sizes in advance, use iterator over string splits instead of arrays. (#1138)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs

    r3742 r3937  
    2626using HeuristicLab.Persistence.Core;
    2727using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     28using HeuristicLab.Persistence.Auxiliary;
    2829
    2930namespace HeuristicLab.Persistence.Default.Xml.Compact {
     
    3233  internal abstract class NumberArray2XmlSerializerBase<T> : CompactXmlSerializerBase<T> where T : class {
    3334
    34     protected virtual string Separator { get { return ";"; } }
     35    protected virtual char Separator { get { return ';'; } }
    3536    protected abstract string FormatValue(object o);
    3637    protected abstract object ParseValue(string o);
     
    4041      int[] lengths = new int[a.Rank];
    4142      int[] lowerBounds = new int[a.Rank];
    42       StringBuilder sb = new StringBuilder();
     43      StringBuilder sb = new StringBuilder(a.Rank * 3);
    4344      sb.Append(a.Rank);
     45      int capacity = 1;
    4446      for (int i = 0; i < a.Rank; i++) {
    4547        sb.Append(Separator);
    4648        sb.Append(a.GetLength(i));
    4749        lengths[i] = a.GetLength(i);
     50        capacity *= lengths[i];
    4851      }
     52      sb.EnsureCapacity(capacity * 3);
    4953      for (int i = 0; i < a.Rank; i++) {
    5054        sb.Append(Separator);
     
    7175    public override T Parse(XmlString x) {
    7276      try {
    73         IEnumerator values =
    74           x.Data.Split(new[] { Separator },
    75           StringSplitOptions.RemoveEmptyEntries).GetEnumerator();
     77        IEnumerator values = x.Data.GetSplitEnumerator(Separator);
    7678        values.MoveNext();
    7779        int rank = int.Parse((string)values.Current);
Note: See TracChangeset for help on using the changeset viewer.