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?

- 8,281
- 10
- 52
- 88

- 4,915
- 8
- 41
- 54
-
3Do you need a standard function from some lib or just a new one? Because a loop could always do the trick... – Kokozaurus Oct 21 '12 at 19:54
-
Something from an existing library would be great. But Thread.Sleep(10000) won't work. – Sisiutl Oct 21 '12 at 20:02
-
I'm a bit confused about this line: `not rendering time`. Do you mean you want the server to run at 100% while your application is not blocked in code? – Silvermind Oct 21 '12 at 21:11
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.

- 167,383
- 100
- 513
- 979

- 8,281
- 10
- 52
- 88
-
3Above function clearly gives some real task to execute instead of looping in a while loop. I dont know why fellow developer downvoted without any comment/doubt/clarification. Any further discussion on this would really help community to tackel similar problems. :) – Parag Meshram Nov 21 '12 at 16:18
-
Your function is quite neat. I validated it here with some random numbers: http://primes.utm.edu/nthprime/index.php#nth – Avatar33 Apr 02 '14 at 06:27
-
6
-
1This function is great! It allowed me to test having multiple threads crunching the CPU at the same time for some proof of concept – Nelson Rodriguez Jul 18 '18 at 23:35
Arguably the simplest such function is this:
public void Slow()
{
var end = DateTime.Now + TimeSpan.FromSeconds(10);
while (DateTime.Now < end)
/* nothing here */ ;
}

- 110,860
- 49
- 189
- 262
-
-
This uses a lot of IO to the Kernel, it does not necessary hammer the CPU – Carlos Garcia Mar 28 '22 at 10:59
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.

- 2,376
- 27
- 35
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.

- 2,038
- 1
- 20
- 36
This is CPU intensive on a single thread/CPU, and lasts 10 seconds.
var endTime = DateTime.Now.AddSeconds(10);
while(true) {
if (DateTime.Now >= endTime)
break;
}
As a side note, you should not normally do this.

- 30,601
- 24
- 116
- 172
Just use
Thread.Sleep(number of milliseconds here);
You will have to add using System.Threading;
-
-
-
Had you proposed *that* as an answer instead, then your answer wouldn't be entirely incorrect. You choose not to do so. – Servy May 24 '17 at 14:59