Ich verwende 5 Hotels APIs und versuche, min Preis Hotel mit einzigartigen Hotels aus allen APIs zu kombinieren und zu wählen. Ich folge diesen STEPSSo steigern Sie die Leistung von API-Anruf
- Rufen Sie alle 5 APIs und warten auf Antwort.
- erhalten alle statischen Daten aus der Datenbank oder wenn mein Server-Caching in Anspruch nehmen (alle 5 APIs wie Name Hotels, Bilder, ab, etc)
- Kombinieren Sie in einer benutzerdefinierten Klasse
- GIATA Kartencodes von Caching oder Datenbank erhalten.
- GIATA in API-Ergebnis übernehmen und alle Hotels mit eindeutiger GIATA-ID gruppieren.
- Wählen Sie Mindestpreis.
Binden Sie die Benutzeroberfläche und zeigen Sie sie dem Kunden.
string sessionid = sqf; DS.Models.BL.Common.HotelSearchDetails details = new DS.Models.BL.Common.HotelSearchDetails(); details = (.Models.BL.Common.HotelSearchDetails)Session["Details_" + sessionid]; List<DS.BL.Common.HotelDetails> DOTWhdlist = new List<DS.BL.Common.HotelDetails>(); List<DS.BL.Common.HotelDetails> GTAhdlist = new List<DS.BL.Common.HotelDetails>(); List<DS.BL.Common.HotelDetails> HPhdlist = new List<DS.BL.Common.HotelDetails>(); List<DS.BL.Common.HotelDetails> HBhdlist = new List<DS.BL.Common.HotelDetails>(); List<DS.BL.Common.HotelDetails> TSGhdlist = new List<DS.BL.Common.HotelDetails>(); //GTA City Cache DS.Models.BL.GTA_Model.Methods.HotelInfo hinfo = new Models.BL.GTA_Model.Methods.HotelInfo(); List<GTA.API.HotelSearch.GTAHotels> hlist = new List<GTA.API.HotelSearch.GTAHotels>(); hlist = hinfo.GethotellistCityWise(details.GTACityCode); // /************************************************* * DOTW cache * *************************************************/ DS.BL.DOTW.Method.HotelInfo objhoteldetails = new DS.BL.DOTW.Method.HotelInfo(); Dictionary<string, int> dictionary = objhoteldetails.Gethotelratings(); List<DOTW.Method.searchhotels.DotwHotels> objhotellist = new List<DOTW.Method.searchhotels.DotwHotels>(); objhotellist = objhoteldetails.GethotellistCityWise(details.DOTWCityCode); //------------------------------------------------------------------------------------------------------- //------Hotel pro cache city DS.BL.HotelsPro.Method.GetHotelDetails objhoteldetails_hp = new BL.HotelsPro.Method.GetHotelDetails(); List<HotelsPro.Method.Avail.HotelsProHotels> objhotellist_hp = new List<HotelsPro.Method.Avail.HotelsProHotels>(); objhotellist_hp = objhoteldetails_hp.GethotellistCityWise(details.HotelsProCityCode); /*************************************************** * Hotelbeds city cache * */ DS.Models.BL.HotelBeds.Methods.HotelInfoController objhotelbeds = new DS.Models.BL.HotelBeds.Methods.HotelInfoController(); List<HotelBeds.Method.SearchHotel.HotelBedsHotels> HBhotellist = new List<HotelBeds.Method.SearchHotel.HotelBedsHotels>(); HBhotellist = objhotelbeds.GethotellistCityWise(details.HBCityCode); /************************************************** * * TSG city cache * */ DS.Models.BL.TSG.Methods.HotelInfo objtsg_hotel = new Models.BL.TSG.Methods.HotelInfo(); List<TSG.API.HotelAvail.TSGHotels> TSGhlist = new List<TSG.API.HotelAvail.TSGHotels>(); TSGhlist = objtsg_hotel.GethotellistCityWise(details.City); //--------------------------------------------------------------------------------------------------------------------- var dotw = Task<List<DS.BL.Common.HotelDetails>>.Factory.StartNew(() => Dotw(sqf, details, dictionary, objhotellist)); var gta = Task<List<DS.BL.Common.HotelDetails>>.Factory.StartNew(() => GTA(sqf, details, hlist)); var hotelpro = Task<List<DS.BL.Common.HotelDetails>>.Factory.StartNew(() => Hp(sqf, details, objhotellist_hp)); var hotelbeds = Task<List<DS.BL.Common.HotelDetails>>.Factory.StartNew(() => HB(sqf, details, HBhotellist)); var tsg = Task<List<DS.BL.Common.HotelDetails>>.Factory.StartNew(() => TSG(sqf, details, TSGhlist)); DOTWhdlist = dotw.Result; TSGhdlist = tsg.Result; GTAhdlist = gta.Result; HPhdlist = hotelpro.Result; HBhdlist = hotelbeds.Result; ViewBag.sessionId = sessionid; DOTWhdlist.AddRange(GTAhdlist); DOTWhdlist.AddRange(HPhdlist); DOTWhdlist.AddRange(HBhdlist); DOTWhdlist.AddRange(TSGhdlist); string[] c = details.CityName.Split(','); string cityname = c[0]; List<DS.BL.Common.HotelDetails> filterdata = GiataApply(DOTWhdlist, cityname, details.GiataCityid); List<DS.BL.Common.HotelDetails> tsgdata = filterdata.Where(x => x.giataref == "exclusivelyhotels").ToList(); List<DS.BL.Common.HotelDetails> gtadata = filterdata.Where(x => x.giataref == "gta").ToList(); List<DS.BL.Common.HotelDetails> dotwdata = filterdata.Where(x => x.giataref == "DOTW").ToList(); List<DS.BL.Common.HotelDetails> hpdata = filterdata.Where(x => x.giataref == "metglobal").ToList(); List<DS.BL.Common.HotelDetails> hbdata = filterdata.Where(x => x.giataref == "hotelbeds").ToList(); allSup.dotw = dotwdata;
GIATA
GILTList<DS.BL.Common.HotelDetails> GiataApply(List<DS.BL.Common.HotelDetails> hlist, string city, int Cityid)
{
DS.Models.BL.Common.GIATA.giataCodes giataCodes = new Models.BL.Common.GIATA.giataCodes();
List<GiataProperty> gcode = new List<GiataProperty>();
gcode = giataCodes.GiataCodes(city, Cityid);
var query = from h in hlist
join g in gcode on new { hotelcode = h.HotelId, supcode = h.giataref }
equals new { hotelcode = g.Hcode, supcode = g.ProviderCode }
select new DS.BL.Common.HotelDetails
{
HotelName = h.HotelName,
HCode = h.HCode,
HotelId = h.HotelId,
Address = h.Address,
image = h.image,
location = h.location,
Currency = h.Currency,
searchId = h.searchId,
Price = h.Price,
rating = h.rating,
hoteldescription = h.hoteldescription,
Latitude = h.Latitude,
Longitude = h.Longitude,
imagelist = h.imagelist,
Source = h.Source,
giataref = h.giataref,
HFullResponse = h.HFullResponse,
AvailableRoomList = h.AvailableRoomList,
HotelRooms = h.HotelRooms,
facilities = h.facilities,
faDetails = h.faDetails,
giata = g.giataId.Value,
hotelservices = h.hotelservices,
gtaIDref = h.gtaIDref
};
var filter = from x in query
group x by x.giata into hotels
select new DS.BL.Common.HotelDetails
{
HotelName = hotels.FirstOrDefault().HotelName,
HCode = hotels.FirstOrDefault().HCode,
HotelId = hotels.FirstOrDefault().HotelId,
Address = hotels.FirstOrDefault().Address,
image = hotels.FirstOrDefault().image,
location = hotels.FirstOrDefault().location,
Currency = hotels.FirstOrDefault().Currency,
searchId = hotels.FirstOrDefault().searchId,
imagelist = hotels.FirstOrDefault().imagelist,
Price = hotels.Min(p => p.Price),
rating = hotels.FirstOrDefault().rating,
hoteldescription = hotels.FirstOrDefault().hoteldescription,
Latitude = hotels.FirstOrDefault().Latitude,
Longitude = hotels.FirstOrDefault().Longitude,
Source = hotels.FirstOrDefault().Source,
giataref = hotels.FirstOrDefault().giataref,
HFullResponse = hotels.FirstOrDefault().HFullResponse,
AvailableRoomList = hotels.FirstOrDefault().AvailableRoomList,
HotelRooms = hotels.FirstOrDefault().HotelRooms,
facilities = hotels.FirstOrDefault().facilities,
faDetails = hotels.FirstOrDefault().faDetails,
giata = hotels.FirstOrDefault().giata,
hotelservices = hotels.FirstOrDefault().hotelservices,
gtaIDref = hotels.FirstOrDefault().gtaIDref
};
return filter.ToList();
//return query.ToList();
}
Keine dieser Prozess 30-45 sec nehmen. Ich möchte reduzieren, ich weiß nicht, wie ich es tue, aber in API-Aufruf muss ich Zeit reduzieren und GIATA anwenden.
gib mir Idee Jungs dank
Wenn Sie meinen Code sehen, rufe ich APIs in Aufgabe, so dass dieser Anruf parallel, so dass es nicht erforderlich ist, hier async aufrufen –
Profilieren Sie Ihren Code. Ist es API-Aufruf dauert Zeit oder SQL? – user902384