测试了一把 XslTransform 的性能

Using directives

namespace testXsltTransform
{
    
class Program
    
{
        
static string xml0, xslt0, prefix;

        
definition 

        
public Program(string _prefix, string xml, string xslt)
        
{
            prefix 
= _prefix;
            xml0 
= xml;
            xslt0 
= xslt;
        }


        
public interface IXmlLoader 
        
{
            XPathNavigator GetXml();
        }


        
public interface ITransformLoader 
        
{
            XslTransform GetTransform();
        }


        
XPath Loader  

        
XmlDocument Loader

        
XmlDataDocument Loader

        
cache 

        
void trans(IXmlLoader xml, ITransformLoader trans)
        
{
            
//using (MemoryStream output = new MemoryStream())
            using(NullStream output = new NullStream())
            
{
                trans.GetTransform().Transform(xml.GetXml(), 
null, output);
                output.Flush();
                
//Console.WriteLine(Encoding.Default.GetString(output.ToArray()));
            }

        }


        
public class NullStream : System.IO.Stream
        
{
            
public override bool CanRead{get return false; }}

            
public override bool CanSeek{get return false; }}

            
public override bool CanWrite{get return true; }}

            
public override void Flush(){}
            
public override long Length{get throw new global::System.NotImplementedException(); }}

            
public override long Position
            
{
                
get{throw new global::System.NotImplementedException();}
                
set{throw new global::System.NotImplementedException();}
            }


            
public override int Read(byte[] buffer, int offset, int count){throw new NotImplementedException();}

            
public override long Seek(long offset, SeekOrigin origin){throw new NotImplementedException();}

            
public override void SetLength(long value){throw new NotImplementedException();}

            
public override void Write(byte[] buffer, int offset, int count){}
        }


        
public class Tri 
        
{
            
public string descr;
            
public IXmlLoader xml;
            
public ITransformLoader trans;
            
public Tri(string _des, IXmlLoader _xml, ITransformLoader _trans) 
            
{
                descr 
= _des; xml = _xml; trans = _trans;
            }

        }


        
testcode 

        
static void Main(string[] args)
        
{

            Program prog 
= new Program("xslt1 ", const_xml0, const_xslt0);
            prog.doTest();

            prog 
= new Program("xslt2 ", const_xml0, const_xslt1);
            prog.doTest();
        }


        
/*
        Console Display:
round 0
round 1
round 2
round 3
round 4
round 5
result:
xslt1 doc:     no cache    220    210    240    220    210    
xslt1 xpath:   no cache    210    190    180    180    190    
xslt1 datadoc: no cache    370    360    360    350    360    
xslt1 doc:     doc cache    180    190    190    200    190    
xslt1 xpath:   doc cache    150    150    150    160    150    
xslt1 datadoc: doc cache    620    640    640    620    610    
xslt1 doc:     xslt cache    90    90    70    90    80    
xslt1 xpath:   xslt cache    80    70    80    70    80    
xslt1 datadoc: xslt cache    180    190    180    180    180    
xslt1 doc:     all cache    50    50    50    60    50    
xslt1 xpath:   all cache    40    50    40    40    40    
xslt1 datadoc: all cache    430    440    420    450    410    
round 0
round 1
round 2
round 3
round 4
round 5
result:
xslt2 doc:     no cache    220    200    220    230    220    
xslt2 xpath:   no cache    160    250    170    170    160    
xslt2 datadoc: no cache    360    390    360    350    370    
xslt2 doc:     doc cache    170    180    180    170    170    
xslt2 xpath:   doc cache    150    140    140    150    160    
xslt2 datadoc: doc cache    630    650    711    701    761    
xslt2 doc:     xslt cache    80    80    80    80    80    
xslt2 xpath:   xslt cache    140    70    80    70    70    
xslt2 datadoc: xslt cache    200    180    170    180    180    
xslt2 doc:     all cache    80    50    50    40    50    
xslt2 xpath:   all cache    50    40    40    40    30    
xslt2 datadoc: all cache    550    430    440    450    450    
        
        
*/

    }

}

你可能感兴趣的:(测试了一把 XslTransform 的性能)