I am trying to find a fast way to speed the following for loops
up. (just fun theory stuff)
I have the following program
using System;
using System.Collections;
using System.Diagnostics;
namespace SpeedTest
{
class Program
{
static void Main(string[] args)
{
Stopwatch timer = new Stopwatch();
timer.Start();
ArrayList widgets = new ArrayList(50000);
for (int i = 0; i < widgets.Capacity; i++)
{
widgets.Add(new Widget(i));
}
string ProcessingMessages = "";
for (int i = 0; i < widgets.Count; i++)
{
Widget widgetToProcess = (Widget)widgets[i];
ProcessingMessages += widgetToProcess.ProcessWidget();
ProcessingMessages += "\r\n";
}
Console.WriteLine(ProcessingMessages);
timer.Stop();
Console.WriteLine(timer.Elapsed);
Console.ReadLine();
}
}
class Widget
{
public Widget()
{
this.CreatedDateTime = DateTime.Now;
}
public Widget(int ID) : this()
{
this.ID = ID;
}
public DateTime CreatedDateTime { get; set; }
public int ID { get; set; }
public string ProcessWidget()
{
int Z = this.ID + this.ID;
string Message = "Widget ID " + this.ID;
Message += " was created on ";
Message += CreatedDateTime.Year + "-" + CreatedDateTime.Month + "-" + CreatedDateTime.Day + ", at ";
Message += CreatedDateTime.Hour + ":" + CreatedDateTime.Minute + ", with a value of ";
Message += Z.ToString();
return Message;
}
}
}
How can I speed these for loops
up within itself? I know that implementing parallelism would be useful, such as
for (int i = 0; i < widgets.Count; i += 10)
{
Widget widgetToProcess1 = (Widget)widgets[i];
Widget widgetToProcess2 = (Widget)widgets[i+1];
Widget widgetToProcess3 = (Widget)widgets[i+2];
Widget widgetToProcess4 = (Widget)widgets[i+3];
Widget widgetToProcess5 = (Widget)widgets[i+4];
Widget widgetToProcess6 = (Widget)widgets[i + 5];
Widget widgetToProcess7 = (Widget)widgets[i + 6];
Widget widgetToProcess8 = (Widget)widgets[i + 7];
Widget widgetToProcess9 = (Widget)widgets[i + 8];
Widget widgetToProcess10 = (Widget)widgets[i + 9];
ProcessingMessages += widgetToProcess1.ProcessWidget() + "\r\n" +
widgetToProcess2.ProcessWidget() + "\r\n" +
widgetToProcess3.ProcessWidget() + "\r\n" +
widgetToProcess4.ProcessWidget() + "\r\n" +
widgetToProcess5.ProcessWidget() + "\r\n" +
widgetToProcess6.ProcessWidget() + "\r\n" +
widgetToProcess7.ProcessWidget() + "\r\n" +
widgetToProcess8.ProcessWidget() + "\r\n" +
widgetToProcess9.ProcessWidget() + "\r\n" +
widgetToProcess10.ProcessWidget() + "\r\n";
}
However that is all manually written. I am trying to find a way to dynamically break apart a large task/array size and run those chunks faster.
Looking for some simple thoughts/concepts on this. Or, if there are better alternatives than using a for
loop for this test.