Program.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Net;
  5. using Jint.Runtime;
  6. namespace Jint.Benchmark
  7. {
  8. class Program
  9. {
  10. private const string simple = @"
  11. var o = {};
  12. o.Foo = 'bar';
  13. o.Baz = 42;
  14. o.Blah = o.Foo + o.Baz;
  15. if(o.Blah != 'bar42') throw TypeError;
  16. function fib(n){
  17. if(n<2) {
  18. return n;
  19. }
  20. return fib(n-1) + fib(n-2);
  21. }
  22. if(fib(3) != 8) throw TypeError;
  23. ";
  24. private static readonly string[] Sunspider = new string[]
  25. {
  26. "https://gist.github.com/sebastienros/6274930/raw/bf0ab41e788eb9b978a29180f5cb4d614bc00dc5/gistfile1.js"
  27. };
  28. static void Main(string[] args)
  29. {
  30. const bool runIronJs = true;
  31. const bool runJint = true;
  32. const bool runJurassic = true;
  33. const int iterations = 1000;
  34. const bool reuseEngine = false;
  35. var watch = new Stopwatch();
  36. foreach (var url in Sunspider)
  37. {
  38. var script = new WebClient().DownloadString(url);
  39. if (runIronJs)
  40. {
  41. IronJS.Hosting.CSharp.Context ironjs;
  42. ironjs = new IronJS.Hosting.CSharp.Context();
  43. ironjs.Execute(script);
  44. watch.Restart();
  45. for (var i = 0; i < iterations; i++)
  46. {
  47. if (!reuseEngine)
  48. {
  49. ironjs = new IronJS.Hosting.CSharp.Context();
  50. }
  51. ironjs.Execute(script);
  52. }
  53. Console.WriteLine("{2} | IronJs: {0} iterations in {1} ms", iterations, watch.ElapsedMilliseconds,
  54. Path.GetFileName(url));
  55. }
  56. if (runJint)
  57. {
  58. Engine jint;
  59. jint = new Engine();
  60. jint.Execute(script);
  61. watch.Restart();
  62. for (var i = 0; i < iterations; i++)
  63. {
  64. if (!reuseEngine)
  65. {
  66. jint = new Jint.Engine();
  67. }
  68. jint.Execute(script);
  69. }
  70. Console.WriteLine("{2} | Jint: {0} iterations in {1} ms", iterations, watch.ElapsedMilliseconds,
  71. Path.GetFileName(url));
  72. }
  73. if (runJurassic)
  74. {
  75. Jurassic.ScriptEngine jurassic;
  76. jurassic = new Jurassic.ScriptEngine();
  77. jurassic.Execute(script);
  78. watch.Restart();
  79. for (var i = 0; i < iterations; i++)
  80. {
  81. if (!reuseEngine)
  82. {
  83. jurassic = new Jurassic.ScriptEngine();
  84. }
  85. jurassic.Execute(script);
  86. }
  87. Console.WriteLine("{2} | Jurassic: {0} iterations in {1} ms", iterations, watch.ElapsedMilliseconds,
  88. Path.GetFileName(url));
  89. }
  90. }
  91. }
  92. }
  93. }