Performance 循环中的高性能问题

Performance 循环中的高性能问题,performance,c#-4.0,visual-studio-2012,Performance,C# 4.0,Visual Studio 2012,我有一个循环内的高性能问题。老实说,我不知道如何优化代码。使用VisualStudioPerformanceExplorer,我已经设法修复了一些我遇到的错误,但现在问题似乎是由于这个特定的for循环正在执行的循环数量 以下是Visual Studio的屏幕截图: 我猜想,由于标记了inti=0,性能问题是由于大量循环造成的。Alsp,我知道ExecuteReader被标记为高性能,但我认为我无法改变这一点,我的意思是,这是我从数据库中收到的请求 编辑 代码: public IQueryabl

我有一个循环内的高性能问题。老实说,我不知道如何优化代码。使用VisualStudioPerformanceExplorer,我已经设法修复了一些我遇到的错误,但现在问题似乎是由于这个特定的for循环正在执行的循环数量

以下是Visual Studio的屏幕截图:

我猜想,由于标记了
inti=0
,性能问题是由于大量循环造成的。Alsp,我知道ExecuteReader被标记为高性能,但我认为我无法改变这一点,我的意思是,这是我从数据库中收到的请求

编辑

代码:

public IQueryable GetMatches()
{
DLTxOdds DLTxOdds=新的DLTxOdds();
IQueryable matches=dlTxOdds.GetMatches();
List mList=新列表();
//对于每个检索到的匹配,请检查它是否包含任何确定的赌注
foreach(匹配中的匹配m)
{
列表匹配surebets=新列表();
//赢得比赛的乐趣
m、 sport=dlTxOdds.GetMatchSport(m.sportid);
//获取匹配的顺序,按奇数类型id排序
m、 matchOffers=dlTxOdds.GetMatchOffers(m.matchid).OrderBy(o=>o.ot.ToList();
int tempID=-1;
List tempMatchOffersList=新列表();
//每一场比赛都有各自的收受赌注、赔率和奇数类型
for(int i=0;is.max==true).OrderByDescending(s=>s.profit.ToList();
m列表添加(m);
}
}
}
mList=mList.OrderByDescending(m=>m.sureBets[0].利润).ToList();
返回mList.AsQueryable();
}

不要发布图像,而是发布代码。复制/粘贴相关代码并不太困难。这样就不可能理解发生了什么事你是对的,对不起。我现在已经发布了代码。感谢您的回复。谁知道它用红色标记
inti=0
意味着什么?我就要一些。如果您试图使它花费更少的时间,您可能能够执行更少的迭代。您可能还看到,在循环中调用的函数正在做一些可以优化的事情。如果它们在大多数堆栈样本上,则可以通过另一种方式执行
Add
AddRange
操作,从而节省大量时间(用于健康的加速)。这是因为您在采样模式而不是插装模式下使用探查器。当然,循环需要更多的时间,它执行更多的指令。当您分析代码时,您需要知道的最重要的事情是知道您何时完成。
public IQueryable<Match> GetMatches()
{
    DLTxOdds dlTxOdds = new DLTxOdds();
    IQueryable<Match> matches = dlTxOdds.GetMatches();
    List<Match> mList = new List<Match>();

    // For each retrieved match check whether it contains any sure bets
    foreach (Match m in matches)
    {
        List<SureBet> matchSureBets = new List<SureBet>();

        // Get sport of match
        m.sport = dlTxOdds.GetMatchSport(m.sportid);
        // Get orders of match, ordered by the odd type id
        m.matchOffers = dlTxOdds.GetMatchOffers(m.matchid).OrderBy(o => o.ot).ToList();

        int tempID = -1;
        List<Offer> tempMatchOffersList = new List<Offer>();
        // For every match offer get its respective bookmaker, odds and odd type
        for (int i = 0; i < m.matchOffers.Count; i++)
        {
            m.matchOffers[i].bookmaker = dlTxOdds.GetBookmaker(m.matchOffers[i].bid);
            m.matchOffers[i].odds = dlTxOdds.GetOfferOdds(m.matchOffers[i].offer_id);
            m.matchOffers[i].oddType = dlTxOdds.GetOddType(m.matchOffers[i].ot);

            // Filter the match offers so that offers with the same odd type id are checked for sure bets
            tempID = m.matchOffers[i].ot;
            // if current index is last one we cannot check for the next element therefore add to list and check for sure bets
            if (i + 1 != m.matchOffers.Count)
            {
                // if next odd type in list is different, check for sure bets
                if (m.matchOffers[i + 1].ot != tempID)
                {
                    tempMatchOffersList.Add(m.matchOffers[i]);
                    // Get sure bets
                    matchSureBets.AddRange(GetSureBets(tempMatchOffersList));
                    tempMatchOffersList = new List<Offer>();
                }
                // else add to temporary list
                else
                    tempMatchOffersList.Add(m.matchOffers[i]);
            }
            else
            {
                tempMatchOffersList.Add(m.matchOffers[i]);
                // Get sure bets
                matchSureBets.AddRange(GetSureBets(tempMatchOffersList));
            }
        }

        if (m.matchOffers.Count() != 0)
        {
            // if match has any sure bets add to list...
            if (matchSureBets.Count() != 0)
            {
                m.sureBets = matchSureBets.Where(s => s.max == true).OrderByDescending(s => s.profit).ToList();
                mList.Add(m);
            }
        }
    }

    mList = mList.OrderByDescending(m => m.sureBets[0].profit).ToList();
    return mList.AsQueryable<Match>();
}