После завершения разработки приложения в Мауи я впервые протестировал его на более старом устройстве: 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