For some testing I'm doing I need a C# function that takes around 10 seconds to execute. It will be called from an ASPX page, but I need the function to eat up CPU time on the server, not rendering time. A slow query into the Northwinds database would work, or some very slow calculations. Any ideas?
6 Answers
Try to calculate nth prime number to simulate CPU intensive work -
public void Slow() { long nthPrime = FindPrimeNumber(1000); //set higher value for more time } public long FindPrimeNumber(int n) { int count=0; long a = 2; while(count<n) { long b = 2; int prime = 1;// to check if found a prime while(b * b <= a) { if(a % b == 0) { prime = 0; break; } b++; } if(prime > 0) { count++; } a++; } return (--a); } How much time it will take will depend on the hardware configuration of the system.
So try with input as 1000 then either increase input value or decrease it.
This function will simulate CPU intensive work.
4 Comments
int prime = 1 is used as boolean. Why not simply use bool?Arguably the simplest such function is this:
public void Slow() { var end = DateTime.Now + TimeSpan.FromSeconds(10); while (DateTime.Now < end) /* nothing here */ ; } 2 Comments
You can use a 'while' loop to make the CPU busy.
void CpuIntensive() { var startDt = DateTime.Now; while (true) { if ((DateTime.Now - startDt).TotalSeconds >= 10) break; } } This method will stay in the while loop for 10 seconds. Also, if you run this method in multiple threads, you can make all CPU cores busy.
Comments
For maxing out multiple cores I adjusted @Motti's answer a bit, and got the following:
Enumerable .Range(1, Environment.ProcessorCount) // replace with lesser number if 100% usage is not what you are after. .AsParallel() .Select(i => { var end = DateTime.Now + TimeSpan.FromSeconds(10); while (DateTime.Now < end) /*nothing here */ ; return i; }) .ToList(); // ToList makes the query execute. Comments
Just use
Thread.Sleep(number of milliseconds here);
You will have to add using System.Threading;
not rendering time. Do you mean you want the server to run at 100% while your application is not blocked in code?