熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

IronPython和C#執行速度對比

2022-06-13   來源: ASP編程 

  我構思的實驗覆蓋到下面幾個我認為是實際項目中比較有代表性的場景

  訪問一個稍大的數據表遍歷所有記錄

  生成並操作一個列表

  生成並操作一個字典

  通過反射動態加載並調用一個方法

  C#部分的代碼編譯時使用了/debug和/optimize+

  


    usingSystem;  
    usingSystemDataSqlClient;  
    usingSystemDiagnostics;  
    usingSystemCollectionsGeneric;  
    usingSystemReflection;  
     
    namespaceTest  
    {  
    classTest  
    {  
    publicstaticvoidMain(string[]args)  
    {  
    ConsoleWriteLine(C#:);  
    Measure(TestDbTestDb);  
    Measure(TestListTestList);  
    Measure(TestDictTestDict);  
    Measure(TestReflectionTestReflection);  
    }  
     
    delegatevoidFuncDelegate();  
     
    staticvoidMeasure(FuncDelegatefuncstringfuncName)  
    {  
    Stopwatchsw=newStopwatch();  
    swStart();  
    func();  
    swStop();  
    ConsoleWriteLine({}used{}msfuncNameswElapsedMilliseconds);  
    }  
     
    staticvoidTestDb()  
    {  
    using(SqlConnectionconn=newSqlConnection(connStr))  
    {  
    connOpen();  
     
    SqlCommandcmd=newSqlCommand(sqlconn);  
    SqlDataReaderreader=cmdExecuteReader();  
    while(readerRead())  
    {  
    varid=reader[Id];  
    varcode=reader[Code];  
    varcargoCode=reader[CargoCode];  
    varlength=reader[Length];  
    varwidth=reader[Width];  
    varheight=reader[Height];  
    varvol=reader[Vol];  
    varpallet=reader[Pallet];  
    }  
    readerClose();  
    cmdDispose();  
    connClose();  
    }  
    }  
     
    staticvoidTestList()  
    {  
    varlist=newList();  
    constintcount=;  
    for(inti=;ilistAdd(stringFormat(item{}i));  
    for(inti=count;i>=;i)  
    listRemoveAt(i);  
    }  
     
    staticvoidTestDict()  
    {  
    vardict=newDictionary();  
    constintcount=;  
    for(inti=;idict[stringFormat(key{}i)]=stringFormat(value{}i);  
    for(inti=;idictRemove(stringFormat(key{}i));  
    }  
     
    staticvoidTestReflection()  
    {  
    AssemblyAssemblyassem=AssemblyLoadFrom(Libdll);  
    Typetype=assemGetType(LibTestLib);  
    constintcount=;  
    ConstructorInfoci=typeGetConstructor(TypeEmptyTypes);  
    MethodInfomi=typeGetMethod(GetMessage);  
    for(inti=;i{  
    objectobj=ciInvoke(null);//ActivatorCreateInstance(type);  
    miInvoke(objnewobject[]{name});  
    }  
    }  
     
    conststringconnStr=IntegratedSecurity=SSPI;InitialCatalog=test;DataSource=;  
     
    conststringsql=select*fromCargoPackageTypes;  
    }  

  IronPython部分的代碼:

  


    from__future__importwith_statement  
    importclrsys  
    clrAddReference(SystemData)  
    fromSystemDataSqlClientimportSqlCommandSqlConnection  
    fromSystemDiagnosticsimportStopwatch  
    fromSystemReflectionimportAssembly  
     
    connStr=IntegratedSecurity=SSPI;InitialCatalog=test;DataSource=;  
     
    sql=select*fromCargoPackageTypes;  
     
    deftestDb():  
    withSqlConnection(connStr)asconn:  
    connOpen()  
     
    cmd=SqlCommand(sqlconn)  
    reader=cmdExecuteReader()  
    whilereaderRead():  
    id=reader[Id]  
    code=reader[Code]  
    cargoCode=reader[CargoCode]  
    length=reader[Length]  
    width=reader[Width]  
    height=reader[Height]  
    vol=reader[Vol]  
    pallet=reader[Pallet]  
    readerClose()  
    cmdDispose()  
    connClose()  
    deftestList():  
    lst=[]  
    count= 
    foriinxrange(count):  
    lstappend(item%d%i)  
    foriinxrange(count):  
    lstpop(i)  
    deftestDict():  
    d={}  
    count= 
    foriinxrange(count):  
    d[key%d%i]=value%d%i  
    foriinxrange(count):  
    dpop(key%d%i)  
    deftestReflection():  
    clrAddReferenceToFile(Libdll)  
    fromLibimportTestLib  
    count= 
    foriinxrange(count):  
    obj=TestLib()  
    objGetMessage(name)  
    defmeasure(fn):  
    sw=Stopwatch()  
    swStart()  
    fn()  
    swStop()  
    print%sused%sms%(fn__name__swElapsedMilliseconds)  
    printPython:  
    measure(testDb)  
    measure(testList)  
    measure(testDict)  
    measure(testReflection) 

  運行結果

  運行結果ASP編程免費提供,內容來源於互聯網,本文歸原作者所有。

推薦文章
Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.