简体   繁体   English

如何衡量Android Xamarin应用上的数据使用情况?

[英]How to measure data usage on Android Xamarin app?

What would be best way to measure data usage in Android Xamarin app in Visual Studio? 在Visual Studio的Android Xamarin应用程序中衡量数据使用的最佳方法是什么?

I would like to know, how much data was transferred for each called request. 我想知道,每个调用的请求传输了多少数据。 I was looking in Xamarin Profiler but there isn't any info about data usage. 我在寻找Xamarin Profiler,但没有有关数据使用的任何信息。

Thanks. 谢谢。

One approach that you could use is via Android Device Monitor to watch network traffic 您可以使用的一种方法是通过Android设备监视器来监视网络流量

在此处输入图片说明

在此处输入图片说明

Alternatively you could wrap your request if you are using HttpClient in a custom handler and log the size of the request payload: 另外,如果您在自定义处理程序中使用HttpClient ,则可以包装请求,并记录请求有效负载的大小:

public class RequestLoggerHandler : HttpClientHandler
{

#if DEBUG
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var stopwatch = Stopwatch.StartNew();
        HttpResponseMessage response = null;
        var headers = request.Headers;
        var responseString = string.Empty;
        var requestString = string.Empty;
        var outputStringBuilder = new StringBuilder();

        const string LINE_ENDING = "===================================================================================================";
        const string SECTION_ENDING = "---------------------------------------------------------------------------------------------------";

        try
        {
            if (request.Content != null) requestString = await request.Content?.ReadAsStringAsync();
            response = await base.SendAsync(request, cancellationToken);
            responseString = await response.Content?.ReadAsStringAsync();

            outputStringBuilder.AppendLine(LINE_ENDING);

            // Headers
            outputStringBuilder.AppendLine("REQUEST HEADERS:");
            foreach (var header in headers)
                outputStringBuilder.AppendLine($"HEADER: {header.Key}: {header.Value?.ToList()?.FirstOrDefault()}");
            outputStringBuilder.AppendLine(SECTION_ENDING);

            // Parameters
            outputStringBuilder.AppendLine("REQUEST PARAMS:");
            outputStringBuilder.AppendLine(requestString);
            outputStringBuilder.AppendLine(SECTION_ENDING);

            // Response
            outputStringBuilder.AppendLine("RESPONSE:");
            outputStringBuilder.AppendLine(responseString);
            outputStringBuilder.AppendLine(SECTION_ENDING);

            return response;
        }
        finally
        {
            stopwatch.Stop();
            var totalSize = 0L;

            if (response != null)
            {
                var bodylength = response.Content.Headers.ContentLength;
                var headerlength = response.Headers.ToString().Length;
                totalSize = bodylength.GetValueOrDefault() + headerlength;
            }

            outputStringBuilder.AppendLine(string.Format("REQUEST [{0}:{1}] Time:{2}| Size:{3}| HTTP-CODE:{4}",
                request.Method.ToString(),
                request.RequestUri,
                stopwatch.Elapsed.ToString("ss\\.fff"),
                totalSize.ToPrettyByteSize(),
                response?.StatusCode.ToString() ?? "No Internet Connectivity"));

            outputStringBuilder.AppendLine(LINE_ENDING);

            Debug.WriteLine("\n" + outputStringBuilder);
        }
    }
#endif
}

Then in your output window using VSColorOutput extension it produces a nice readable report of your request/response, including time and size. 然后,在使用VSColorOutput扩展的输出窗口中,它会生成有关请求/响应(包括时间和大小)的可读报告。 You can of cause simplify this code if all you are after is just the request/response size. 如果您所追求的只是请求/响应的大小,则可以简化此代码。

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM