I am iterating in 2509693 data in for loop which is taking long time. i am using VS2013 and .Net v4.5.2
so see my code and suggest some approach or changes for my existing code which speed up execution of my for loop.
This ds.Tables[1] has 2509693 data please guide me how to restructure & speed up below code. Thanks
public static List<ElementHierarchy> GetElementHierarchy(DataSet ds)
{
List<ElementHierarchy> _ElmHierarchy = new List<ElementHierarchy>();
string StrPrevDisplayInCSM = "", DisplayInCSM = "", Section = "", LineItem = "", LastGroupName = "", BGColor="",
BlueMatrix1stElementFormulaText = "", Type = "", Period = "", EarningsType = "", ParentGroup = "", HeadingSubheading = "", Box="";
int row = 6, EarningID = 0, LineItemID = 0, BMID = 0, ID = 0, ParentID=0;
bool IsNextElementGroup = false;
List<ListOfSection> lstData = new List<ListOfSection>();
bool IsGreenHeader = false;
for (int p = 0; p <= ds.Tables[1].Rows.Count - 1; p++)
{
ID = Convert.ToInt32(ds.Tables[1].Rows[p]["ID"].ToString());
ParentID = Convert.ToInt32(ds.Tables[1].Rows[p]["ParentID"].ToString());
EarningID = 0;
Section = (ds.Tables[1].Rows[p]["Section"] == DBNull.Value ? "" : ds.Tables[1].Rows[p]["Section"].ToString());
LineItem = (ds.Tables[1].Rows[p]["LineItem"] == DBNull.Value ? "" : ds.Tables[1].Rows[p]["LineItem"].ToString());
DisplayInCSM = ds.Tables[1].Rows[p]["DisplayInCSM"].ToString();
Type = ds.Tables[1].Rows[p]["Type"].ToString();
BlueMatrix1stElementFormulaText = (ds.Tables[1].Rows[p]["BlueMatrix1stElementFormulaText"] == null
? "" : ds.Tables[1].Rows[p]["BlueMatrix1stElementFormulaText"].ToString());
Period = (ds.Tables[1].Rows[p]["Period"] == DBNull.Value ? "" : ds.Tables[1].Rows[p]["Period"].ToString());
HeadingSubheading = (ds.Tables[1].Rows[p]["HeadingSubheading"] == null ? "" : ds.Tables[1].Rows[p]["HeadingSubheading"].ToString());
Box = (ds.Tables[1].Rows[p]["Box"] == DBNull.Value ? "" : ds.Tables[1].Rows[p]["Box"].ToString());
LineItemID = Convert.ToInt32(ds.Tables[1].Rows[p]["LineItemID"].ToString());
BMID = Convert.ToInt16(ds.Tables[1].Rows[p]["BMID"].ToString());
BGColor = (ds.Tables[1].Rows[p]["BGColor"] == null ? "" : ds.Tables[1].Rows[p]["BGColor"].ToString());
if (BGColor.Contains("ff003300"))
{
IsGreenHeader = true;
}
else
{
IsGreenHeader = false;
}
if (StrPrevDisplayInCSM != "" && StrPrevDisplayInCSM != DisplayInCSM && (Type == "LINEITEM" || Type=="BM"))
{
row++;
}
if (Type == "GROUP")
{
if (IsNextElementGroup)
{
row++;
}
else if (p > 0 && !IsNextElementGroup)
{
row++;
if (p > 0 && HeadingSubheading=="H")
{
row++;
}
if (p > 0 && HeadingSubheading == "S")
{
row++;
}
}
else if (p > 0 && IsGreenHeader)
{
row++;
}
else if (p > 0 && ds.Tables[1].AsEnumerable().Any(a => a.Field<int>("ParentID") == ID && a.Field<string>("Type") == "GROUP"))
{
row++;
}
ParentGroup = DisplayInCSM;
if (HeadingSubheading != "")
{
if (HeadingSubheading == "H")
{
if (Box != "Y")
{
}
}
}
if(IsGreenHeader)
{
row++;
}
else if (ds.Tables[1].AsEnumerable().Any(a => a.Field<int>("ParentID") == ID && a.Field<string>("Type")=="GROUP"))
{
row++;
}
IsNextElementGroup = true;
}
else if (Type == "LINEITEM")
{
if (!lstData.Any(a =>
a.Section == Section
&& a.LineItem == LineItem
&& a.Parent == ParentGroup
&& a.DisplayINCSM == DisplayInCSM
&& a.EarningsID == EarningID
&& a.EarningsType == EarningsType
&& a.Period == Period
))
{
if (!_ElmHierarchy.Any(z => z.RowIndex == row))
{
_ElmHierarchy.Add(new ElementHierarchy
{
ID=ID,
ParentID=ParentID,
RowIndex = row,
Section = Section,
Lineitem = LineItem,
Type = "LI",
DisplayInCSM = DisplayInCSM,
BMFormula = "",
LineitemID = LineItemID,
BMID = 0
});
}
lstData.Add(new ListOfSection
{
Section = Section,
LineItem = LineItem,
DisplayINCSM = DisplayInCSM,
Parent = ParentGroup,
EarningsID = EarningID,
EarningsType = EarningsType,
Period = Period
});
}
IsNextElementGroup = false;
IsGreenHeader = false;
}
else if (Type == "BM")
{
IsNextElementGroup = false;
IsGreenHeader = false;
if (!lstData.Any(a =>
a.Section == Section
&& a.LineItem == LineItem
&& a.Parent == ParentGroup
&& a.DisplayINCSM == DisplayInCSM
&& a.EarningsID == EarningID
&& a.EarningsType == EarningsType
&& a.Period == Period
))
{
if (!_ElmHierarchy.Any(z => z.RowIndex == row))
{
_ElmHierarchy.Add(new ElementHierarchy
{
ID = ID,
ParentID = ParentID,
RowIndex = row,
Section = Section,
Lineitem = LineItem,
Type = "BM",
DisplayInCSM = DisplayInCSM,
BMFormula = BlueMatrix1stElementFormulaText,
LineitemID = 0,
BMID = BMID
});
}
lstData.Add(new ListOfSection
{
Section = Section,
LineItem = LineItem,
DisplayINCSM = DisplayInCSM,
Parent = ParentGroup,
EarningsID = EarningID,
EarningsType = EarningsType,
Period = Period
});
}
}
StrPrevDisplayInCSM = DisplayInCSM;
}
return _ElmHierarchy;
}
public class ListOfSection
{
public string Parent { get; set; }
public int EarningsID { get; set; }
public string EarningsType { get; set; }
public string Section { get; set; }
public string LineItem { get; set; }
public string DisplayINCSM { get; set; }
public string Period { get; set; }
}