Странная перегрузка оперативной памяти с асинхронной задачей на ARM32 - Android API 27Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Странная перегрузка оперативной памяти с асинхронной задачей на ARM32 - Android API 27

Сообщение Anonymous »

После завершения разработки приложения в Мауи я впервые протестировал его на более старом устройстве: Motorola E5 Play (2 ГБ ОЗУ) - Android 8.1 Oreo. При открытии приложения около 300 МБ памяти немедленно распределяется и остается почти статичным с максимальным изменением ~ 5 мб.
При запуске подключения сокета: await connectwithretryasync (); Соединение успешно, и задача завершена (транзакция данных не проводится между сервером и клиентом), после того, как конскольник. Вызов. /> снова тестирование на xiaomi mi 9 Global (6 ГБ ОЗУ) - ARM64. Приложение начинает выделять 1400 МБ ОЗУ. Я оставил приложение, работающее в течение 40 минут, и не было сбоя или потери производительности. < /P>
То же самое на эмуляторе Android (комната x86-64) распределяет 700 МБ. Поэтому я не мог найти, что это делает на ARM32. < /P>
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;

using YourNameSpace.Resources.Languages;

namespace YourNameSpace.Source.Network
{
public class Socket_Connection
{
private readonly string _host;
private readonly int _port;

private TcpClient? _client;
private NetworkStream? _stream;
private CancellationTokenSource? _cts;

private bool _isConnected = false;

private readonly int _maxRetries = 1;
private readonly int _retryDelayMs = 1000;

public int Ping { get; set; } = 0;

public Socket_Connection(string host, int port)
{
_host = host;
_port = port;
}

public async Task StartAsync(Button connectButton, Label PingLabel)
{
_connectButton = connectButton;
_pingLabel = PingLabel;
_cts = new CancellationTokenSource();

await ConnectWithRetryAsync();

Console.WriteLine("OK_HERE");
}

private async Task ConnectWithRetryAsync()
{
int retries = 0;

while (retries < _maxRetries && _cts != null && !_cts.IsCancellationRequested)
{
try
{
_client?.Close();
_client = new TcpClient();

Task? connectTask = _client.ConnectAsync(_host, _port);
Task? timeoutTask = Task.Delay(5000);

Task? completedTask = await Task.WhenAny(connectTask, timeoutTask);
if (completedTask == timeoutTask)
{
throw new TimeoutException(AppResources.Connection_to);
}

if (!_client.Connected)
{
throw new SocketException((int)SocketError.NotConnected);
}

_stream = _client.GetStream();
_isConnected = true;
retries = 0;

if (Application.Current?.MainPage != null)
{
await MainThread.InvokeOnMainThreadAsync(async () =>
{
await Application.Current.MainPage.DisplayAlert(AppResources.Success, $"{AppResources.Connected_to} {_host}:{_port}", "OK");
});
}

if (_connectButton is not null)
{
_connectButton.IsEnabled = true;
}
return;
}
catch (Exception ex)
{
Console.WriteLine($"Retry {retries + 1} failed: {ex.Message}");

_client?.Close();
_stream?.Close();
_isConnected = false;

retries++;
await Task.Delay(_retryDelayMs);
}
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... oid-api-27
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»