Click here to Skip to main content
15,885,537 members
Articles / Programming Languages / C#

NPerf, A Performance Benchmark Framework for .NET

Rate me:
Please Sign up or sign in to vote.
4.92/5 (44 votes)
25 Jan 20044 min read 231.2K   705   139  
NPerf is a framework for benchmarking classes and methods, that tastes like NUnit.
<?xml version="1.0" encoding="Windows-1252" ?>
<configuration>
    <!-- Leave this alone. Sets up configsectionhandler section -->
    <configSections>
        <section name="nant" type="NAnt.Core.ConfigurationSection, NAnt.Core" />
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
    </configSections>
    <appSettings>
        <!-- Used to indicate the location of the cache folder for shadow files -->
        <add key="shadowfiles.path" value="%temp%\nunit20\ShadowCopyCache" />
        <!-- Used to indicate that NAnt should shadow files in a cache folder near the executable -->
        <add key="nant.shadowfiles" value="False" />
        <!-- Used to indicate if cached files should be delete when done running-->
        <add key="nant.shadowfiles.cleanup" value="False" />
        <!-- To enable internal log4net logging, uncomment the next line -->
        <!-- <add key="log4net.Internal.Debug" value="true"/> -->
    </appSettings>
    <!-- nant config settings -->
    <nant taskpath=".\optional">
        <frameworks>
            <platform name="win32" default="net-1.0">
                <framework name="net-1.0" description="Microsoft .NET Framework 1.0" version="${version}" runtimeengine=""
                    sdkdirectory="${sdkInstallRoot}bin" frameworkdirectory="${installRoot}v${version}" frameworkassemblydirectory="${installRoot}v${version}">
                    <properties>
                        <property name="version" value="1.0.3705" />
                        <property name="sdkInstallRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="sdkInstallRoot" />
                        <property name="installRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="InstallRoot" />
                    </properties>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">csc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vbc">
                            <attribute name="exename">vbc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="jsc">
                            <attribute name="exename">jsc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vjc">
                            <attribute name="exename">vjc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">resgen</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="al">
                            <attribute name="exename">al</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                    </tasks>
                </framework>
                <framework name="net-1.1" description="Microsoft .NET Framework 1.1" version="${version}" runtimeengine=""
                    sdkdirectory="${sdkInstallRoot}bin" frameworkdirectory="${installRoot}v${version}" frameworkassemblydirectory="${installRoot}v${version}">
                    <properties>
                        <property name="version" value="1.1.4322" />
                        <property name="sdkInstallRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="sdkInstallRootv1.1" />
                        <property name="installRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="InstallRoot" />
                    </properties>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">csc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vbc">
                            <attribute name="exename">vbc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="jsc">
                            <attribute name="exename">jsc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vjc">
                            <attribute name="exename">vjc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">resgen</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="al">
                            <attribute name="exename">al</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                    </tasks>
                </framework>
                <framework name="net-1.2" description="Microsoft .NET Framework 1.2" version="${version}" runtimeengine=""
                    sdkdirectory="${sdkInstallRoot}bin" frameworkdirectory="${installRoot}v${version}" frameworkassemblydirectory="${installRoot}v${version}">
                    <properties>
                        <property name="version" value="1.2.30703" />
                        <property name="sdkInstallRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="sdkInstallRootv1.2" />
                        <property name="installRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="InstallRoot" />
                    </properties>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">csc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vbc">
                            <attribute name="exename">vbc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="jsc">
                            <attribute name="exename">jsc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vjc">
                            <attribute name="exename">vjc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">resgen</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="al">
                            <attribute name="exename">al</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                    </tasks>
                </framework>
                <framework name="netcf-1.0" description="Microsoft .Net Compact Framework Framework 1.0" version="${version}"
                    runtimeengine="" sdkdirectory="${sdkInstallRoot}v${version}\bin" frameworkdirectory="${installRoot}v1.1.4322"
                    frameworkassemblydirectory="${sdkInstallRoot}v${version}\Windows CE">
                    <properties>
                        <property name="version" value="1.0.5000" />
                        <property name="sdkInstallRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETCompactFramework"
                            regvalue="sdkInstallRoot" />
                        <property name="installRoot" useregistry="true" regkey="SOFTWARE\Microsoft\.NETFramework"
                            regvalue="InstallRoot" />
                    </properties>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">csc</attribute>
                            <attribute name="noconfig">true</attribute>
                            <attribute name="nostdlib">true</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="vbc">
                            <attribute name="exename">vbc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">cfresgen</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="al">
                            <attribute name="exename">al</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="delay-sign">
                            <attribute name="exename">sn</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                    </tasks>
                </framework>
                <framework name="mono-1.0" description="GNOME projects port of the .NET Framework" version="${version}"
                    runtimeengine="mono.exe" sdkdirectory="${sdkInstallRoot}\bin" frameworkdirectory="${sdkInstallRoot}\bin"
                    frameworkassemblydirectory="${frameworkAssemblyDirectory}">
                    <properties>
                        <property name="version" value="0.28" />
                        <property name="sdkInstallRoot" useregistry="true" regkey="SOFTWARE\Mono\${version}" regvalue="SdkInstallRoot" />
                        <property name="frameworkAssemblyDirectory" useregistry="true" regkey="SOFTWARE\Mono\${version}" regvalue="FrameworkAssemblyDirectory" />
                        <property name="configDir" useregistry="true" regkey="SOFTWARE\Mono\${version}" regvalue="MonoConfigDir" />
                    </properties>
                    <environment>
                        <env name="PATH" path="${frameworkAssemblyDirectory};%PATH%" />
                        <env name="MONO_BASEPATH" path="${sdkInstallRoot};%MONO_BASEPATH%" />
                        <env name="MONO_PATH" path="${frameworkAssemblyDirectory};%MONO_PATH%" />
                        <env name="MONO_CFG_DIR" path="${configDir};%MONO_CFG_DIR%" />
                    </environment>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">mcs</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="vbc">
                            <attribute name="exename">mbas</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">monoresgen</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="delay-sign">
                            <attribute name="exename">monosn</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                    </tasks>
                </framework>
                <framework name="sscli-1.0" description="Microsoft Shared Source CLI 1.0" version="${version}"
                    runtimeengine="clix.exe" sdkdirectory="C:\sscli\build\v1.x86fstchk.rotor\sdk\bin" frameworkdirectory="C:\sscli\build\v1.x86fstchk.rotor"
                    frameworkassemblydirectory="C:\sscli\build\v1.x86fstchk.rotor">
                    <properties>
                        <property name="version" value="1.0.0000" />
                    </properties>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">csc</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="jsc">
                            <attribute name="exename">jsc</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">resgen</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="al">
                            <attribute name="exename">al</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                        <task name="delay-sign">
                            <attribute name="exename">sn</attribute>
                            <attribute name="useruntimeengine">false</attribute>
                        </task>
                    </tasks>
                </framework>
            </platform>
            <platform name="unix" default="mono-1.0">
                <framework name="mono-1.0" description="GNOME projects port of the .NET Framework" version="${version}"
                    runtimeengine="mono" sdkdirectory="/usr/local/bin" frameworkdirectory="/usr/local/bin"
                    frameworkassemblydirectory="/usr/local/lib">
                    <properties>
                        <property name="version" value="0.28" />
                    </properties>
                    <tasks>
                        <task name="csc">
                            <attribute name="exename">mcs</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="vbc">
                            <attribute name="exename">mbas</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="resgen">
                            <attribute name="exename">monoresgen</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                        <task name="delay-sign">
                            <attribute name="exename">monosn</attribute>
                            <attribute name="useruntimeengine">true</attribute>
                        </task>
                    </tasks>
                </framework>
            </platform>
            <!-- Framework-neutral properties -->
            <properties>
                <!-- <property name="foo" value = "bar" /> -->
            </properties>
            <!-- Framework-neutral task configuration defaults -->
            <tasks>
                <!-- settings for individual tasks -->
            </tasks>
        </frameworks>
        <!-- Default properties -->
        <properties>
            <!-- add global properties here in the following format-->
            <!-- <property name="foo" value = "bar" readonly="false" /> -->
        </properties>
    </nant>
    <!--
        This section contains the log4net configuration settings.

        By default, no messages will be logged to the log4net logging infrastructure.

        To enable the internal logging, set the threshold attribute on the log4net element
        to "ALL".

        When internal logging is enabled, internal messages will be written to the 
        console.
    -->
    <log4net threshold="OFF">
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="[%c{2}:%m  - [%x] &lt;%X{auth}&gt;]%n" />
            </layout>
        </appender>
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <param name="File" value="${APPDATA}\\NAnt\\NAnt.log" />
            <param name="AppendToFile" value="true" />
            <param name="MaxSizeRollBackups" value="2" />
            <param name="MaximumFileSize" value="500KB" />
            <param name="RollingStyle" value="Size" />
            <param name="StaticLogFileName" value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="[%c{2}:%m  - [%x] &lt;%X{auth}&gt;]%n" />
            </layout>
        </appender>
        <!-- Setup the root category, add the appenders and set the default level -->
        <root>
            <!-- Only log messages with severity ERROR (or higher) -->
            <level value="ERROR" />
            <!-- Log messages to the console -->
            <appender-ref ref="ConsoleAppender" />
            <!-- Uncomment the next line to enable logging messages to the NAnt.log file -->
            <!-- <appender-ref ref="RollingLogFileAppender" /> -->
        </root>
        <!-- Specify the priority for some specific categories -->
        <!--
        <logger name="NAnt.Core.TaskBuilderCollection">
            <level value="DEBUG" />
        </logger>
        <logger name="NAnt">
            <level value="INFO" />
        </logger>
        -->
    </log4net>
    <startup>
        <supportedRuntime version="v1.1.4322" />    
        <supportedRuntime version="v1.0.3705" />
    </startup>
</configuration>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Engineer
United States United States
Jonathan de Halleux is Civil Engineer in Applied Mathematics. He finished his PhD in 2004 in the rainy country of Belgium. After 2 years in the Common Language Runtime (i.e. .net), he is now working at Microsoft Research on Pex (http://research.microsoft.com/pex).

Comments and Discussions