Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据下载到应用程序的速度非常慢_C#_Visual Studio_Uwp - Fatal编程技术网

C# 将数据下载到应用程序的速度非常慢

C# 将数据下载到应用程序的速度非常慢,c#,visual-studio,uwp,C#,Visual Studio,Uwp,我正在编写uwp应用程序 我尝试下载json并显示数据 我向方法lan和lon发送变量,将其放入并链接和下载数据 位置代码: public class LocationManager { public async static Task<Geoposition> GetPosition() { var accessStatus = await Geolocator.RequestAccessAsync(); if (accessSt

我正在编写uwp应用程序

我尝试下载json并显示数据

我向方法lan和lon发送变量,将其放入并链接和下载数据

位置代码:

 public class LocationManager
{
    public async static Task<Geoposition> GetPosition()
    {
        var accessStatus = await Geolocator.RequestAccessAsync();

        if (accessStatus != GeolocationAccessStatus.Allowed) throw new Exception();

        var geolocator = new Geolocator { DesiredAccuracyInMeters = 0 };

        var position = await geolocator.GetGeopositionAsync();

        return position;
    }
}

我的问题是延迟,我点击按钮,它会在30-40秒内显示数据。互联网一切都好。为什么我会有这么大的延迟?

嗨,你是用fiddler或类似的东西来查看包裹大小的吗?如果不是的话,我会从这里开始如果这不是你的问题,我可能认为序列化需要很多时间。我在json.net上获得了很好的过期性,接下来我会尝试一下。如果您的包大小很大,您可能需要考虑使用copression-json.net也有很好的“快速”实现,如果您需要一个链接,请告诉我。还有一个建议:您的函数都是异步的,但您使用的是wait,这最终会使您的方法停止。异步调用完成时,您可能希望使用回调事件,以便在收到数据时处理数据。@Tripleee这就是
await
所做的。@Eugene使用Fiddler捕获您的包(如上所述)进行一些研究。还有可能
api.openweather
本身速度很慢。另外,请注意:不要为每个请求创建http客户端,
HttpClient
(在System.Net和UWP模拟中)意味着在应用程序的整个生命周期中实例化一次()@Sergey.quixoticaxis.Ivanov Hi Sergey,是的,我知道这是wait做的,但我的意思不同:
private readonly Func executionFunc=delegate(){return 1;};私有操作AsyncCallback=委托(IAsyncResult ar){//DoStuff};private void DoSomething(){executionFunc.BeginInvoke(新的异步回调(异步回调),executionFunc);}
     private const string APPID = "f3c45b5a19426de9ea6ba7eb6c6969d7";
        public async static Task<RootObject> GetWeather(double lat, double lon)
            {
                var http = new HttpClient();
                var url = String.Format(
                    "http://api.openweathermap.org/data/2.5/weather?lat={0}&lon={1}&units=metric&APPID="+APPID, lat, lon);
                var response = await http.GetAsync(url);
                var result = await response.Content.ReadAsStringAsync();
                var serializer = new DataContractJsonSerializer(typeof(RootObject));

                var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
                var data = (RootObject) serializer.ReadObject(ms);

                return data;
            }
        }

        [DataContract]
        public class Coord
        {
            [DataMember]
            public double lon { get; set; }

            [DataMember]
            public double lat { get; set; }
        }

        [DataContract]
        public class Weather
        {
            [DataMember]
            public int id { get; set; }

            [DataMember]
            public string main { get; set; }

            [DataMember]
            public string description { get; set; }

            [DataMember]
            public string icon { get; set; }
        }

        [DataContract]
        public class Main
        {
            [DataMember]
            public double temp { get; set; }

            [DataMember]
            public double pressure { get; set; }

            [DataMember]
            public double humidity { get; set; }

            [DataMember]
            public double temp_min { get; set; }

            [DataMember]
            public double temp_max { get; set; }
        }

        [DataContract]
        public class Wind
        {
            [DataMember]
            public double speed { get; set; }

            [DataMember]
            public double deg { get; set; }
        }

        /*
        [DataContract]
        public class Rain
        {
            [DataMember]
            public double __invalid_name__1h { get; set; }
        }
        */

        [DataContract]
        public class Clouds
        {
            [DataMember]
            public int all { get; set; }
        }

        [DataContract]
        public class Sys
        {

            [DataMember]
            public int type { get; set; }

            [DataMember]
            public int id { get; set; }

            [DataMember]
            public double message { get; set; }

            [DataMember]
            public string country { get; set; }

            [DataMember]
            public int sunrise { get; set; }

            [DataMember]
            public int sunset { get; set; }
        }

        [DataContract]
        public class RootObject
        {
            [DataMember]
            public Coord coord { get; set; }

            [DataMember]
            public List<Weather> weather { get; set; }

            [DataMember]
            public string @base { get; set; }

            [DataMember]
            public Main main { get; set; }

            [DataMember]
            public Wind wind { get; set; }

/*
                                                [DataMember]
                                                public Rain rain { get; set; }
                                                */

            [DataMember]
            public Clouds clouds { get; set; }

            [DataMember]
            public int dt { get; set; }

            [DataMember]
            public Sys sys { get; set; }

            [DataMember]
            public int id { get; set; }

            [DataMember]
            public string name { get; set; }

            [DataMember]
            public int cod { get; set; }
        }
 public async void WeatherDisplay()
    {
        try
        {
            //var position = await LocationManager.GetPosition();
            var geoLocator = new Geolocator();
            geoLocator.DesiredAccuracy = PositionAccuracy.High;
            Geoposition pos = await geoLocator.GetGeopositionAsync();
            var lat = pos.Coordinate.Point.Position.Latitude;
            var lon = pos.Coordinate.Point.Position.Longitude;

            RootObject myWeather =
                await OpenWeatherMapProxy.GetWeather(
                    lat,
                    lon);



            Temperature.Text = ((int)myWeather.main.temp).ToString() + "°C";
           // DescriptionTextBlock.Text = myWeather.weather[0].description;
            City.Text = myWeather.name;
        }
        catch
        {

        }
    }