github.com/pyroscope-io/pyroscope@v0.37.3-0.20230725203016-5f6947968bd0/examples/dotnet/rideshare/example/Program.cs (about) 1 using System; 2 using System.Collections.Generic; 3 using System.Threading; 4 using Microsoft.AspNetCore.Http; 5 6 namespace Example; 7 8 using System.Collections; 9 using Microsoft.AspNetCore.Builder; 10 11 public static class Program 12 { 13 public static void Main(string[] args) 14 { 15 object globalLock = new(); 16 var strings = new List<string>(); 17 var orderService = new OrderService(); 18 var bikeService = new BikeService(orderService); 19 var scooterService = new ScooterService(orderService); 20 var carService = new CarService(orderService); 21 22 var app = WebApplication.CreateBuilder(args).Build(); 23 app.MapGet("/bike", () => 24 { 25 bikeService.Order(1); 26 return "Bike ordered"; 27 }); 28 app.MapGet("/scooter", () => 29 { 30 scooterService.Order(2); 31 return "Scooter ordered"; 32 }); 33 34 app.MapGet("/car", () => 35 { 36 carService.Order(3); 37 return "Car ordered"; 38 }); 39 40 41 app.MapGet("/pyroscope/cpu", (HttpRequest request) => 42 { 43 var enable = request.Query["enable"] == "true"; 44 Pyroscope.Profiler.Instance.SetCPUTrackingEnabled(enable); 45 return "OK"; 46 }); 47 app.MapGet("/pyroscope/allocation", (HttpRequest request) => 48 { 49 var enable = request.Query["enable"] == "true"; 50 Pyroscope.Profiler.Instance.SetAllocationTrackingEnabled(enable); 51 return "OK"; 52 }); 53 app.MapGet("/pyroscope/contention", (HttpRequest request) => 54 { 55 var enable = request.Query["enable"] == "true"; 56 Pyroscope.Profiler.Instance.SetContentionTrackingEnabled(enable); 57 return "OK"; 58 }); 59 app.MapGet("/pyroscope/exception", (HttpRequest request) => 60 { 61 var enable = request.Query["enable"] == "true"; 62 Pyroscope.Profiler.Instance.SetExceptionTrackingEnabled(enable); 63 return "OK"; 64 }); 65 66 67 app.MapGet("/playground/allocation", (HttpRequest request) => 68 { 69 var strings = new List<string>(); 70 for (var i = 0; i < 10000; i++) 71 { 72 strings.Add("foobar" + i); 73 } 74 75 return "OK"; 76 }); 77 app.MapGet("/playground/contention", (HttpRequest request) => 78 { 79 for (var i = 0; i < 100; i++) 80 { 81 lock (globalLock) 82 { 83 Thread.Sleep(10); 84 } 85 } 86 return "OK"; 87 }); 88 app.MapGet("/playground/exception", (HttpRequest request) => 89 { 90 for (var i = 0; i < 1000; i++) 91 { 92 try 93 { 94 throw new Exception("foobar" + i); 95 } 96 catch (Exception e) 97 { 98 } 99 } 100 return "OK"; 101 }); 102 app.MapGet("/playground/leak", (HttpRequest request) => 103 { 104 for (var i = 0; i < 1000; i++) 105 { 106 strings.Add("leak " + i); 107 } 108 return "OK"; 109 }); 110 app.MapGet("/", () => 111 { 112 string env = ""; 113 foreach (DictionaryEntry e in System.Environment.GetEnvironmentVariables()) 114 { 115 env += e.Key + " = " + e.Value + "<br>\n"; 116 } 117 return env; 118 }); 119 120 app.Run(); 121 } 122 }