2016-12-14 4 views
0

Я использую 5 API отелей и стараюсь объединить и выбрать минимальный отель с уникальными отелями из всех API. Я следую этим STEPSКак повысить производительность вызова API

  1. Позвонить по всем 5 APIs и ждать ответа.
  2. получить все статические данные из базы данных или, если воспользоваться моей кэширования сервера (все 5 API, такие как название гостиницы, изображения, описания и т.д.)
  3. Объединить в один пользовательский класс
  4. получить карту кодов ГИАТА от кэширования или базы данных.
  5. Применить GIATA в API результат и собрать все отели с уникальным идентификатором GIATA.
  6. Выберите минимальную цену.
  7. Bind UI и показать клиенту.

    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; 
    

ГИАТА ДЕЙСТВИЕ

List<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(); 
    } 

Нет этот процесс принимает 30-45 сек. Я хочу уменьшить, я не знаю, как это сделать, но в API-вызове мне нужно сократить время и применить GIATA.

дают мне идеи, ребята Thanks

ответ

0

Find асинхронной версии ваших API вызовов и использовать их. Это должно решить вашу проблему. Если не доступна асинхронная версия, вам нужно будет сделать это в коде C#. Я не эксперт на C#, поэтому я не могу вам помочь.

+0

, если вы видите мой код, я вызываю API в Task, поэтому этот вызов параллелен, поэтому нет необходимости вызывать async здесь –

+0

Профилируйте свой код. Это время вызова API или SQL? – user902384

Смежные вопросы