0
我正在使用數據Web服務將數據從數據庫傳輸到網站。我正在訪問4個表格(每個實體)在對服務的不同查詢中。SQL查詢損害我網站的速度--11秒加載
實施例:
- 表1
- 表2
- 表3
- 表4
僞代碼,我使用: FOREACH表1 - 獲取表2 - 獲取表3 - 獲取表4
在這種情況下,我得到1000個查詢。我勒個去?
如何在1個查詢中運行此操作?
我有我的頭幾個解決方案,但我不知道:
- 首先解決 - 1查看,這基本上是 我的網絡數據服務創建自定義的「實體」。
- 第二種解決方案是溝通Web服務,而 使用直接代理到數據庫。
- 解決此問題的第三種解決方案是 Microsoft Cache?
但是我必須爲每個像這樣的「巨大」的操作做到這一點,這真的會激勵我。
創建1000個查詢並在11秒內加載頁面的方法示例。我知道這是完全不能接受的方式和書面差的方法,但你會建議:
public List<OfferLocalizedContent> GetOffersWithContent(long customerId)
{
var countryCode =
this._httpContext.Request.Cookies["countryCode"];
var offers =
this.ClientRepositoryBuilder
.OfferClientRepository
.GetAllOffers(countryCode.Value, customerId);
List<OfferLocalizedContent> list = new List<OfferLocalizedContent>();
foreach (var offer in offers)
{
var localizedContent =
new SyndicateBaseModel(this.ClientRepositoryBuilder)
.GetLocalizedContent(null, offer, null);
OfferLocalizedContent model = new OfferLocalizedContent();
model.Offer = offer;
model.LocalizedContentModel = localizedContent;
var lotteries =
this.ClientRepositoryBuilder
.LotteryClientRepository
.GetLotteriesByOfferId(offer.Id);
var currencyRate =
this.ClientRepositoryBuilder
.CurrencyRateClientRepository
.GetCurrencyRateBasedOnCountryOrCustomer(countryCode.Value, customerId);
model.Jackpot =
new LandingPageBaseModel(this.ClientRepositoryBuilder)
.GetFeedJackpot(lotteries, currencyRate.Type, offer)/1000000;
list.Add(model);
}
return list;
}
GetFeedJackpot通過彩票循環再計算一些信息,這使得循環裏面循環。
public decimal GetFeedJackpot(List<Lottery> lotteries, byte customerAccountType, Offer offer = null)
{
decimal tempPrice = 0;
decimal realPrice = 0;
var currencyRates =
this.ClientRepositoryBuilder
.CurrencyRateClientRepository
.GetCurrencyRates();
foreach (var item in lotteries)
{
var feedMapping =
this.ClientRepositoryBuilder
.FeedScraperLotteryMappingClientRepository
.GetFeedScraperLotteryMappingByLotteryId(item.Id);
if (feedMapping != null)
{
List<DrawDay> drawsList =
this.ClientRepositoryBuilder
.DrawDateClientRepository
.GetDrawDaysByLotteryId(item.Id);
var jackpot =
feedMapping
.FeedScraperJackpots
.OrderByDescending(fsj => fsj.CreatedOn)
.Take(11);
if (jackpot.FirstOrDefault().Amount == 0)
{
var jackpotAverages = jackpot.Skip(1);
if (jackpotAverages.Count() > 0)
{
foreach (var item_jackpot in jackpotAverages)
{
tempPrice += item_jackpot.Amount/jackpotAverages.Count();
}
}
}
else
{
tempPrice = jackpot.FirstOrDefault().Amount;
}
if (lotteries.Count == 1 || offer.CurrencyType != 5)
{
realPrice += tempPrice;
}
else if(lotteries.Count > 1 && offer.CurrencyType == 5)
{
realPrice +=
new WinningBaseModel(this.ClientRepositoryBuilder)
.ConvertLotteryAmountToAccountCurrency(currencyRates, tempPrice, lottery.CurrencyType, customerAccountType);
}
}
}
return
Math.Round(realPrice/1000000m) * 1000000;
}
SQL事件探查器的操作基本上例子(1000查詢什麼?):
我是主持人Azure的服務器上我的東西: DB - 數據網絡服務 - 網站
當我監控Web服務網站,它完全超載,因此加載網站時滯。
聽起來就像是懶惰的加載,當你想要加載時。 http://www.c-sharpcorner.com/UploadFile/b1df45/lazy-loading-vs-eager-loading/ – UnhandledExcepSean 2015-02-24 00:09:12
是懶加載是問題..我想我將不得不使用急切和禁用延遲加載。 – 2015-02-24 01:01:47