LoadRunnerã®.NETããã³Java
ãŸããé åçã ãæªãéžæè¢ãèããŠãã ããã ååãšããŠã.NETãšJavaã®äž¡æ¹ãLoadRunnerã§çŽæ¥åäœããŸãã ãããã®åãã©ãããã©ãŒã ã«ã¯ãæšæºã®LoadRunner APIã®ã©ãããŒã§ããã¯ã©ã¹ããããŸãã ãããã.NETããã³Java Vuserã¢ãŒããéžæããããšã«ãããããããããã«äœ¿çšã§ããŸã ã ããã«èšã£ãŠã¿ãŸãããããããã®ã¹ã¯ãªããéçºã¢ãŒãã¯ããããã«ç°ãªãã¢ãŒãçšã«äœæãããŠããŸãã .NETã¢ãŒãã§ã¯ã.NETã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ãã£ããã£ãèšé²ããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã¹ã¡ãœãããçŽæ¥åŒã³åºãã¹ã¯ãªãããäœæã§ããŸãã Java Vuserã«ã¯Javaçšã®æ¬æ Œçã§ææžåãããAPIããããŸãããèšé²ã¢ãŒãã¯ãŸã£ãããããŸããïŒ .NETãšåãæ¹æ³ã§Java Record ReplayããããŸã ïŒã ãã®ãããããããWebã«äœ¿çšããããšã¯éåžžã«åé¡ãå€ããäžè¬çã«ããã®å Žåã®ã䜿çšããšã¯ãäœããã®åœ¢ã§æ©èœããã³ãŒããæžããããšãæå³ãããã以äžã¯äœãããŸããã ããŒã«ããããŒãã¹ã¯ãªãããéçºããå Žåããã©ãã£ãã¯ãèšé²ãããããã¹ã¯ãªããïŒãã©ãããå«ãïŒã«å€æã§ããããšãéèŠã§ããããã¯ããã«éçºãããŸãã ããããããã«åé¡ããããŸãïŒWebãã©ãã£ãã¯ã®èšé²ïŒ Webã¢ãŒã-HTTP / HTML ïŒã¯ãCã³ãŒããžã®å€æã§ã®ã¿å¯èœã§ãã ã³ãã¥ããã£ã¯ãããé·ãéåŸ ã£ãŠããŸããããå°ãªããšãæ°ããããŒãžã§ã³12.00ã§ã¯CïŒãŸãã¯Javaãéžæã§ããããã«ãªãããšãæ£çŽã«é¡ã£ãŠããŸããããããã¯èµ·ãããŸããã§ããã ããã«ã.NETçšã®APIã¯å®éã«ã¯ææžåãããŠããããæéã®äžã§çæãèžãã§è¡åããå¿ èŠããããŸãïŒãšããã§ã.NETãšJavaã©ãããŒã®ã¡ãœããã·ã°ããã£ãç°ãªããŸãïŒã .NETã¯ã©ã¹ã§å¿ èŠãªã©ãããŒã¡ãœãããæ¯èŒçè¿ éã«èŠã€ããããšãã§ããå Žåããã©ã¡ãŒã¿ãŒãæž¡ãæ¹æ³ãããããŸããã
äŸïŒ
namespace Script { public partial class VuserClass { public int Action() { web.url("ya.ru", "URL=http://ya.ru/", null, null); return 0; } } }
ãã®ã³ãŒãã¯æ©èœããCé¢æ°web_urlïŒïŒãšåçã®ãªã¯ãšã¹ããäœæããŸãã ãã®æ¹æ³ã¯ãã©ã³ã¿ã€ã èšå®ã§ä»»æã®.NETã©ã€ãã©ãªã«æ¥ç¶ããŠããã«äœ¿çšã§ãããšããç¹ã§é åçã§ãããããã«çåãçããŸãã
- web.urlïŒïŒãã©ã¡ãŒã¿ãweb_urlïŒïŒãšåãæ¹æ³ã§æž¡ãæ¹æ³ã¯ïŒ
- ãããã·ãä»ããŠãã¹ãŠãæ©èœãããæ¹æ³ã¯ïŒ
- ãã®ã¢ãŒãã§ã©ã³ã¿ã€ã èšå®ã®å€§éšåãæ¶ããã®ã¯ãªãã§ããïŒ ïŒååãšããŠãçç±ã¯ç解ã§ããŸãããããã«ããç°¡åã«ãªããŸãããïŒ
äžè¬ã«ããã®ã¢ãŒãã¯ãã®ããã«äœæãããŠããªãããããã®ãªãã·ã§ã³ã®æœåšçãªå©äŸ¿æ§ã«ãããããããä»ã®ç®çã«ã¯äœ¿çšãããCã®ãŸãŸã§ãã ããã§ããã¹ã¯ãªããã®äžéšããã°ããäžæžãããæ©èœã¯ããéèŠã§ãã åæã«ãããã€ãã®ç°¡åãªæé ã§ãLoadRunner Cã¹ã¯ãªãããã.NETã³ãŒããåŒã³åºãããšãã§ããŸãã
LoadRunnerã¯ããã€ãã£ãã©ã€ãã©ãªã®åŒã³åºããå®æçã«ãµããŒãããŠããŸããããã«ã¯ãé¢æ°lr_load_dllïŒïŒããããŸãã .NETãåŒã³åºãã«ã¯ããã€ãã£ãã¬ã€ã€ãŒãèšè¿°ããå¿ èŠããããŸããå®éããã€ãã£ãã³ãŒãããCLRã³ãŒããåŒã³åºãããšã¯ãå šäœã®åé¡ã§ãã ãããè¡ãæ¹æ³ãç¥ã£ãŠãã人ã¯ã次ã®ã»ã¯ã·ã§ã³ãã¹ãããã§ããŸããæ®ãã®éšåã«ã€ããŠã¯ããã®æ¹æ³ã説æããŸãã
.NETã«ã¢ã¯ã»ã¹ã§ãããã€ãã£ãDLL
ãã©ãŒã ã®è¡ããã³ãŒãããå¿ èŠããããšïŒ
Создать заявку
ããã¯ãXMLããã³HTMLå ã§äœ¿çšããããšã³ã³ãŒãã®äžçš®ã§ããåæåã¯UTF-8ã³ãŒããšããŠè¡šãããŸãã LoadRunnerã§ãããè¡ãããšã«æåããŸããã§ããïŒèª°ããæ¹æ³ãç¥ã£ãŠãããªããç§ã®éŒ»ãçªããŠãã ããïŒã ããããDottnetã¯ã©ã¹HttpUtilityã«ã¯ããããå®å šã«è¡ãHtmlDecodeïŒïŒã¡ãœããããããŸãã ãããzayuzatããæ¹æ³ãèŠãŠã¿ãŸãããã
å¿ èŠæ¡ä»¶
åœç¶ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸããNETFrameworkã å ·äœçã«ã¯ããã®ã¡ãœããã¯2.0以éã®ããŒãžã§ã³ïŒãŸãã¯ãã以åãããããŸããããåé¡ã§ã¯ãªãïŒã«ãããŸããããã€ãã£ãã©ã€ãã©ãªã¯ã¢ã¯ã»ã¹ããŠããããŒãžã§ã³ã瀺ããç°ãªãããŒãžã§ã³ã¯äºææ§ããªãããšã«æ³šæããŠãã ããã ãŸããWin7 / 2008ã«ã¯.NET FW 3.5ãæ¢ã«ã€ã³ã¹ããŒã«ãããŠããããããããã®OSã§ããŒãã¹ããŒã·ã§ã³ã䜿çšããå Žåãäœãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããããã©ã¹ãã©ã¹ã©ã€ãã©ãªå ã§.NET Framework 3.5ã䜿çšããŠããããšã瀺ãã ãã§ãã
DLLãæžã
ãã°ããã®éãVisual Studioã§C ++ã³ãŒããã.NETã¯ã©ã¹ã«ã¢ã¯ã»ã¹ããããšãéåžžã«ç°¡åã«ãªããŸããã ãããè¡ãã«ã¯ããããžã§ã¯ãèšå®ã§å ±éèšèªã©ã³ã¿ã€ã ãµããŒãã¢ãŒããèšå®ããå¿ èŠããããŸãã 次ã«ããããžã§ã¯ãããããã£ãå ±éããããã£ããã¬ãŒã ã¯ãŒã¯ãåç §ã«ç§»åãã䜿çšããã¢ã»ã³ããªãžã®ãªã³ã¯ãè¿œå ããŸãã ãã®å ŽåãAssemblies / Frameworkã®System.Webã«é¢å¿ããããŸãã ãã®åŸãC ++æ§æã§.NETã¯ã©ã¹ã«æ¢ã«ã¢ã¯ã»ã¹ã§ããŸãã
#include "..\LR include 11.50\lrun.h" //... int xml_http_decode(const char* inputStr, const char* outputParam) { try { System::String^ temp = gcnew System::String(inputStr); System::String^ result = HttpUtility::HtmlDecode(temp); marshal_context^ context = gcnew marshal_context(); lr_save_string(context->marshal_as<const char*>(result), outputParam); } catch(char* message) { lr_save_string(message, outputParam); return LR_FAIL; } catch(...) { lr_save_string("!!! Unknown exception raised !!!", outputParam); return LR_FAIL; } return LR_PASS; }
LoadRunnerã¯ãã€ãã£ãdllã®ã¿ãæ¥ç¶ã§ãããããCäºæã®ã·ã°ããã£ãšæ»ãå€ãæã€é¢æ°ã宣èšããŸãã 次ã«ãã^ãèšå·ã䜿çšããŠ.NETåã宣èšããC ++åãšåºå¥ããŸãã Cè¡ããCLRæååãäœæããŠã.NETã¡ãœããã«æž¡ãå¿ èŠããããŸãã gcnewãªãã¬ãŒã¿ãŒã¯ãCLRãªããžã§ã¯ãã®äœæã«äœ¿çšãããŸãã
é¢æ°ãdllã®å€éšããåŒã³åºãããšãã§ããããã«ããšã¯ã¹ããŒãããå¿ èŠããããŸãã ãã®ããã«æ¬¡ã®ããã«èšè¿°ããŸã
extern "C" { __declspec( dllexport ) int xml_http_decode(const char* inputStr, const char* outputParam); }
次ã«ãã©ã€ãã©ãªãLoadRunnerã«æ¥ç¶ããéãã«é¢æ°ãåŒã³åºããŸãã
lr_load_dll("hplr.dll"); // Native DLL C++. xml_http_decode( "<span class=\"x11z\">Создать " "заявку</span>", "p_decoded"); lr_output_message("%s", lr_eval_string("{p_decoded}")); // .
é¢æ°lr_load_dllïŒïŒã ãããã¡ã€ã«ãèŠã€ãããŸããããšããçŽãããããšã©ãŒã§LoadRunnerã§ã¯ã©ãã·ã¥ããå Žåããã©ã°ã€ã³DLLèªäœã§ã¯ãªãããã®äŸåé¢ä¿ã§ããå¯èœæ§ããããŸãã ãããã°ã¢ãŒãã§ãã«ããããã©ã€ãã©ãªãæ£åžžã«æ¥ç¶ããã«ã¯ã msvcp110d.dllããã³msvcr110d.dllãã¡ã€ã«ããããã32ãããããã³64ãããOSã®System32ãŸãã¯SysWOW64ã«è¿œå ããŸã ã ãã®ä»ã®äŸåé¢ä¿ã¯ãDependency Walkerãªã©ã䜿çšããŠèª¿æ»ã§ããŸãã ã©ã€ãã©ãªããªãªãŒã¹ã¢ãŒãã§ã³ã³ãã€ã«ãããå Žåãè¿œå ã®å¿ èŠã¯ãããŸããïŒã³ã³ãã€ã©èšå®ã®è¿œå ã®#includeããã³äŸåé¢ä¿ãåé€ããŸãïŒã
C ++ã§èšè¿°ãããé¢æ°ã¯ãDLLã§ããã«äœ¿çšã§ããŸãïŒãšã¯ã¹ããŒãããããšãå¿ããªãã§ãã ããïŒïŒã LoadRunnerã§æžãããšãã§ããŸã
ã¹ã¯ãªãããã©ã«ãããå§ãŸãDLLãžã®çžå¯Ÿãã¹ã VuGenãåèµ·åããããã¹ã¯ãªãããå床éãããããå¿ èŠã¯ãããŸããã
ããã«ãããæ¢è£œã®.NETã¯ã©ã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã ããããç§ã®æèŠã§ã¯ã.NETã§äœæ¥ããããã«C ++ã§ã³ãŒããæžãã®ã¯å€å°äžäŸ¿ã§ãããã«é©ããèšèªãä»ã«ããããŸãã
æ³šïŒ C ++ã«ã¯ãæ¢è£œã®ã©ã€ãã©ãªããããããããŸãïŒãããŠããããã¯ããéãåäœããŸãïŒããæåã«ãããç¥ãããŠããçµéšãšç²ŸåºŠãå¿ èŠã§ãããããŠç¬¬äºã«ãããã¯ãã®èšäºã®ç¯å²å€ã§ãã
CïŒã§ã«ã¹ã¿ã ã©ã€ãã©ãªãåŒã³åºã
CïŒã§ããè€éãªããžãã¯ãèšè¿°ããå¥ã®ã¢ã»ã³ããªã«ããã±ãŒãžåãããšããŸãã LRãã圌女ã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯ïŒ
ååãšããŠããã¹ãŠã¯åã®å Žåãšåãã§ããªã³ã¯ãã¢ã»ã³ããªã«è¿œå ããã ãã§ïŒãœãªã¥ãŒã·ã§ã³ãŸãã¯åç §ã䜿çšïŒãã¯ã©ã¹ãã¢ã»ã³ããªããåŒã³åºãå¿ èŠããããŸãã
CïŒDLL
äœããã®çç±ã§ãLoadRunnerã¯ãµãŒããŒå¿çã§ã®ã¿æ£èŠè¡šçŸãæ€çŽ¢ã§ããŸãããCè¡ãŸãã¯ãã©ã¡ãŒã¿ãŒå€ã§æ£èŠè¡šçŸãèŠã€ããæ¹æ³ã¯äžæã§ãïŒèª°ããç¥ã£ãŠãããªãã錻ãçªãïŒã ãã®åé¡ã解決ããã«ã¯ã次ã®é¢æ°ãèšè¿°ã§ããŸãã
// C#-, input pattern // nGroup nMatch. namespace HplrCs { public static class HplrHelper { public static string GetRegexMatch(string input, string pattern, int nMatch, int nGroup) { try { var re = new Regex(pattern); var matches = re.Matches(input); if (matches.Count < nMatch + 1) return String.Empty; var match = matches[nMatch]; if (match.Success) { if (match.Groups.Count < nGroup + 1) return String.Empty; return match.Groups[nGroup].Value; } else return String.Empty; } catch (Exception ex) { return ex.ToString(); } } } }
ãã®ã³ãŒããå«ãã¢ã»ã³ããªãã°ããŒãã«ã¢ã»ã³ããªãã£ãã·ã¥ïŒGACïŒã«é 眮ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãWindows SDKã®äžéšã§ãããVisual Studioãšå ±ã«ã€ã³ã¹ããŒã«ãããgacutil.exeãŠãŒãã£ãªãã£ã䜿çšããŸãã .NET Framework 4.0 / 4.5ã®å ŽåãSDKã®8çªç®ã®ããŒãžã§ã³ã®gacutil.exeã®å¯Ÿå¿ããããŒãžã§ã³ã䜿çšããå¿ èŠããããŸãã以åã®ããŒãžã§ã³ã¯4.0 / 4.5ãã«ããã€ã³ã¹ããŒã«ã§ããŸããã
gacutil.exe -i HplrCs.dll
GACã§ã®ã€ã³ã¹ããŒã«ã¯ã管çè æš©éã§å®è¡ããå¿ èŠããããŸãã 次ã®ããã«ããŠãã¢ã»ã³ããªããã£ãã·ã¥ã«ååšããããšã確èªã§ããŸãã
gacutil.exe -l HplrCs
GACã®ãã«ãããŒãžã§ã³ã眮ãæããã«ã¯ã以åã®ããŒãžã§ã³ã®äžã«ã€ã³ã¹ããŒã«ãå床å®è¡ããå¿ èŠããããŸãã å€ãããŒãžã§ã³ãåé€ããå¿ èŠã¯ãããŸããããã€ã³ã¹ããŒã«ãæåããããšã確èªããããšãéèŠã§ãã
ãã€ãã£ãã©ãããŒã®äœæ
ç¹°ãè¿ããŸãããæåã®ãªãã·ã§ã³ãšåæ§ã«ãLoadRunnerãš.NETã¢ã»ã³ããªéã®ãªã³ã¯ãšãªããã€ãã£ãã©ã€ãã©ãªãäœæããŸãã
#include "..\LR include 11.50\lrun.h" //... extern "C" { __declspec( dllexport ) int get_regex_match( const char* inputStr, const char* pattern, const char* outputParam, int nMatch, int nGroup ); } int get_regex_match(const char* inputStr, const char* pattern, const char* outputParam, int nMatch, int nGroup) { try { System::String^ _inputStr = gcnew System::String(inputStr); System::String^ _pattern = gcnew System::String(pattern); System::String^ result = HplrHelper::GetRegexMatch(_inputStr, _pattern, nMatch, nGroup); marshal_context^ context = gcnew marshal_context(); lr_save_string(context->marshal_as<const char*>(result), outputParam); } catch(char* message) { lr_save_string(message, outputParam); return LR_FAIL; } catch(...) { lr_save_string("!!! Unknown exception raised !!!", outputParam); return LR_FAIL; } return LR_PASS; }
é¢æ°ãšå®æ°LR
ãããããäžèšã®ã³ãŒãã¯LoadRunneré¢æ°ãšå®æ°ã䜿çšããŠããããšã«æ°ã¥ããã§ãããã ããã¯ãç§ãã¡ãè¡ã£ãããšã®ãããã§å¯èœã§ãã
#include "..\LR include 11.50\lrun.h"
ãããæ£ããã¢ã»ã³ãã«ããã«ã¯ããªã³ã«ãŒå ¥åã«lrun50.libã©ã€ãã©ãªãè¿œå ããå¿ èŠããããŸãã ãããã¯ãããããã«ãããŸã
C:\Program Files (x86)\HP\LoadRunner\include C:\Program Files (x86)\HP\LoadRunner\setup\dot_net\Vc9\VCWizards\LrCVuserDllLibrary\templates\1033
圌ãã®å©ããåããŠãã¹ã¯ãªããããåŒã³åºããå Žåãšåãæ¹æ³ã§LoadRunner APIé¢æ°ãåŒã³åºãããšãã§ããŸãã
äŸ
MS Visual Studio 2012ãããžã§ã¯ãã®åœ¢åŒã®å®å šã«æ¢è£œã®ãã³ãã¬ãŒãããããŸãã ãªã³ã¯ããååŸã§ããŸãã
ã¢ãŒã«ã€ãã³ã³ãã³ãïŒ
- C ++ã¯ã.NET Frameworkãšä»ã®.NETã¢ã»ã³ããªã®äž¡æ¹ã§çŽæ¥ã³ãŒããåŒã³åºããããžã§ã¯ãã§ãã
- C Sharpã¯ã.NETã®ã©ã€ãã©ãªïŒã¢ã»ã³ããªïŒã®äŸã§ãã
- LR include *ããã³LR lib *ã¯LoadRunnerããã±ãŒãžã®ãã¡ã€ã«ã§ãLoadRunnerãã€ã³ã¹ããŒã«ãããŠããªãå Žåã«ãããžã§ã¯ãããã«ãã§ããããã«ããããã«ã³ããŒãããŸãã
- åºå-åéããããã€ããªã
- LR Ext libã®äœ¿çšäŸ-äžèšã®ã¢ãããŒãã䜿çšããLoadRunnerã¹ã¯ãªããã®äŸã
Visual Studioã§ãããžã§ã¯ããåããŠéããšã䜿çšãããŠãã.NET Frameworkã®ããŒãžã§ã³ãæŽæ°ããããã«æ±ããããŸãã äœãèµ·ãã£ãŠããã®ãç解ã§ããªãå Žåã¯ããããè¡ãã¹ãã§ã¯ãããŸããã ããŒãžã§ã³ãæŽæ°ãããšããã®ããŒãžã§ã³ãšã¿ãŒã²ãããã¬ãŒã ã¯ãŒã¯ïŒãããžã§ã¯ãããããã£ïŒã䜿çšããŠ.NETã¢ã»ã³ããªããã«ãããå¿ èŠããããŸãã ãšããã§ãã€ã³ã¿ãŒãã§ã€ã¹ã®ã©ãã§C ++ãããžã§ã¯ãã®.NET Frameworkã®ããŒãžã§ã³ãå€æŽã§ãããã¯ããããŸããã§ããã C ++ãããžã§ã¯ãã®ããããã£ã«è¡šç€ºãããŸããã衚瀺ããããã ãã«å€æŽããããšã¯ã§ããŸããã ãã ããããã¯ããã¹ããšãã£ã¿ãŒã§.vcxprojãã¡ã€ã«ãéããXMLèŠçŽ TargetFrameworkVersionãèŠã€ããããšã§å®è¡ã§ããŸãã ãããã£ãŠããããžã§ã¯ãããŸã æŽæ°ããŠããå Žåã¯ãTargetFrameworkVersionãå¿ èŠãªãã®ã«ç·šéãããã.NET Frameworkã®å¥ã®ããŒãžã§ã³ã䜿çšããããã«åãæ¿ããŸãã
æ§èœ
ææ¡ãããã¢ãããŒãã®ããã©ãŒãã³ã¹ã¯ãçµã¿èŸŒã¿é¢æ°ã䜿çšããæå³ãå°ãªããCã®LRã§ã³ãŒãã䜿çšãããã»ã©é åçã§ãã äœããã®ç®çã§çµã¿èŸŒã¿ã®LoadRunneré¢æ°ãããå Žåã¯ããã®èåŸã«ãã€ãã£ãã³ãŒãããããããããã䜿çšããå¿ èŠããããŸããããã¯ãããé«éã«æ©èœããããšãæå³ããŸãã
ããšãã°ãçŽ32KBã®é·ãã®æååããéšåæååãèŠã€ããŠã¿ãŸãããïŒããããé·ãããã®ã¯å°é£ã§ããããã¯ãLoadRunnerãããŒã«ã«ãã©ã¡ãŒã¿ã®ã¹ã¿ãã¯ã«å²ãåœãŠãããšãã§ããæ倧å€ã§ããããã§ãïŒã ç§ã¯ç¹ã«éšåæååæ€çŽ¢ãå€å žçãªã¿ã¹ã¯ã®1ã€ãšããŠããŸãããªããªãããããããã®ã¢ã«ãŽãªãºã ã¯å¯èœãªéãæé©åãããã¹ãã ããã§ãã
#define BUFF_SIZE 32700 char buff[BUFF_SIZE]; int i; lr_load_dll("hplr.dll"); // Native DLL. memset(buff, '-', BUFF_SIZE); buff[BUFF_SIZE - 1] = 0; strcpy(buff + BUFF_SIZE - 4, "+++"); lr_start_transaction("Find substring, internal function"); for (i = 0; i < 100000; i++) strstr(buff, "+++"); lr_end_transaction("Find substring, internal function", LR_AUTO); lr_start_transaction("Find substrings, C# function"); for (i = 0; i < 100000; i++) find_substr_net(buff, "+++"); lr_end_transaction("Find substrings, C# function", LR_AUTO);
.NETã³ãŒãã¯åŒçšããŸããããéåžžã®String.IndexOfïŒïŒãç¶ããŸãã 枬å®ã¯ãã³ã³ãããŒã©ãŒã®ã¹ã¿ãŒãã¢ããã¢ãŒãã§ã®ã¿å®è¡ããå¿ èŠããããVuGenã§ã¯ãå®è¡ã2æ¡é ããªããŸãã
Find substring, internal function: 1,505 Find substring, C# function: 13,323
ããŠãäºæ³éãã ã¡ã€ã³ã®å®è¡æéã¯å®éã«ã¯ãµãã¹ããªã³ã°ã®æ€çŽ¢ã§ãããããã§ã¯ãã€ãã£ãã³ãŒãã倧ããªå©ç¹ããããããŸãã const char *ãSystem.Stringã«å€æãããšãããã»ã¹ã®é床ãäœäžããŸãã
ããããçãããããŸãã ã€ã³ã¿ããªã¿ãç¬ç«ããŠåäœãããŸãã ãããè¡ãã«ã¯ãæŽæ°æŒç®ã§åçŽãªã¢ã¯ã·ã§ã³ãå®è¡ããé¢æ°ãäœæããŸãã
int int_arithm_lr(int p) { int i; int s = p; for (i = 0; i < 10000; i++) { s += i * (i % 2 * 2 - 1); } return s; }
CïŒã³ãŒãã¯ãŸã£ããåãã§ãããpublic staticãšããåèªããããŸãã
äž¡æ¹ã®ã©ã³ã¿ã€ã ã§å®è¡é床ãæ¯èŒããŸãã
lr_start_transaction("Integer arithmetics, LR function"); for (i = 0; i < 500; i++) int_arithm_lr(i); lr_end_transaction("Integer arithmetics, LR function", LR_AUTO); lr_start_transaction("Integer arithmetics, C# function"); for (i = 0; i < 500; i++) int_arithm_net(i); lr_end_transaction("Integer arithmetics, C# function", LR_AUTO);
Integer arithmetics, LR function: 45,772 Integer arithmetics, C# function: 0,013
å·®ã¯3.5ååã§ãã
ãã®ãããªèšç®ã®äœ¿çšã¯è² è·ãã¹ãã®ã·ããªãªã§ã¯äžè¬çã§ã¯ãããŸããããLRã€ã³ã¿ãŒããªã¿ãŒã®åŒ±ç¹ã§ãããã€ãã£ãã³ãŒãã®äœéåãæããã«ããŸãã ãããã£ãŠãæŽç·Žããããã®ãæžãå¿ èŠãããå Žåã.NETã§ã¯ããããå®è£ ããæ¹ã䟿å©ã§ããã ãã§ãªããLRã®Cã³ãŒããããã¯ããã«é«éã«åäœããŸãã
ãããããããªãã®æ³šæã«æè¬ããŸãïŒ