雖然我有幾種方法可以解決問題,但我非常感覺它不是解決問題的最佳方法因爲我現在正在做。讓我先試着解釋我的問題。從數據庫我得到NavReturnModelSP的IEnumerable其中NavReturnModelSP就像以更好更快的方式將IEnumerable的十進制字段重新映射到其他兩個字段
public class NavReturnModelSP
{
public string Scheme_Name { get; set; }
public DateTime Date { get; set; }
public double ReInvest_Nav { get; set; }
}
現在我需要一階通過採用scheme_name &日期設定一個簡單的模型類&則需要在每個方案&日期對的值變基到的基100,以便在第一次約會之間進行適當的比較。 我無法更改數據庫輸出。下面是你的照片,希望它能更好地解釋你的問題。
而我只是通過.... 循環現在解決它在那裏「數據」是NavReturnModelSP
的IEnumerable的var preModel = data.OrderBy(x => x.Scheme_Name).ThenBy(x => x.Date).ToList();
var preScheme = "";
var firstNav = 0d;
for (int i = 0; i < preModel.Count(); i++)
{
if (preModel[i].Scheme_Name != preScheme)
{
firstNav = preModel[i].ReInvest_Nav;
preModel[i].ReInvest_Nav = 100;
}
else
{
if (preModel[i - 1].ReInvest_Nav != 0) // Just a check, nothing special.
preModel[i].ReInvest_Nav = 100 * preModel[i].ReInvest_Nav/firstNav;
}
preScheme = preModel[i].Scheme_Name;
}
現在我有「preModel」與基期數據在ReInvest_Nav列中。但我覺得我沒有使用CPU的適當電源我可以使用Parallal編程/ PLINQ來最小化時間幀,因爲100000行循環將非常慢。有人可以請指導我。
感謝&新年快樂:) 桑傑
我不明白這一點。從數據庫中拉出100000行數據非常慢,優化使用數據的代碼會使整個操作速度提高0.1%。總是首先介紹。 –
@HansPassant我明白,但問題是返回這種類型的數據的SP是一些其他供應商,我不能修改:(和100000是最大它可能會從2000年到該限制 – user1841842
這完全不是當然這個dbase很慢,關鍵是你在浪費時間改進代碼而不能看清它們之間的差異,你沒有**測量過**,你現有的代碼是瓶頸問題 –