Pessoal,
Boa tarde!
Estou fazendo alguns testes para tentar dar um improve na performance de um processo no projeto que estou trabalhando, o cenário é o seguinte;
Realizei alguns testes fazendo a mesma ação sendo na primeira com duas threads e a segunda somente com uma. Os resultados obtidos mostra que mesmo aumentando a quantidade de dados a “processar” o single foi mais rápido (coisa de 150ms em média por teste).
O Teste era criar um array de inteiros com 30000 números quaisquer, iterar sobre os mesmos e retornar o valor final. Utilizando duas threads eu quebrei o 30000 em dois, processando de 0 a 15000 em uma e de 15001 a 3000 em outra. No single processava do 0 ao 30000 diretamente.
Resultados Obtidos
Single-Thread:
TESTE | RESULTADO
1 º - 2.130 MS
2 º - 2.074 MS
Multithreading:
TESTE | RESULTADO
1 º - 2.314 MS
2 º - 2.218 MS
Algumas dúvidas:
1º - O que eu estou fazendo de errado?.
2º - Quais considerações tenho que ter nestes testes?
3º - Comentários! =)
Maquina utilizada no teste [EDIT]
Processador: Intel Core i7-4600u VPro CPU 2.70 ghz
Memória RAM: 8GB
SO: Windows 8
Obrigado pela colaboração de todos! =)
Segue abaixo o código utilizado:
MAIN Single -Thread
static void Main(string[] args)
{
//CRIANDO ARRAY
int[] numbers = new int[30000];
for (int i = 0; i < 30000; i++)
{
numbers[i] = i + i + 1;
}
//RESULT TEST
int uniqueresult = 0;
uniqueresult = Program(0, 30000, numbers,1);
Console.WriteLine("Resultado1: " + uniqueresult);
}
MAIN Multithreading
static void Main(string[] args)
{
//ARRAY
int[] numbers = new int[30000];
for (int i = 0; i < 30000; i++)
{
numbers[i] = i + i + 1;
}
//RESULT TEST
int result1 = 0;
int result2 = 0;
//FIRST PROGRAM
Thread thread1 = new Thread(() => result1 = Program(0, 15000, numbers, 1));
thread1.Start();
//SECOND PROGRAM
Thread thread2 = new Thread(() => result2 = Program(15001, 30000, numbers, 2));
thread2.Start();
thread1.Join();
thread2.Join();
Console.WriteLine("Resultado1: " + (result1+result2));
}
MÉTODO Program
public static int Program(int initial,int end,int[] values,int programaNumero)
{
//RETURN VALUE
int value = 0;
//SUM
for (int i = initial; i < end; i++)
{
Console.WriteLine($"[PROGRAMA{programaNumero}] - Posicao: {i}, Valor: {values[i]} ");
value += values[i];
}
return value;
}