После завершения разработки приложения в Мауи я впервые протестировал его на более старом устройстве: 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
Странная перегрузка оперативной памяти с асинхронной задачей на ARM32 - Android API 27 ⇐ Android
Форум для тех, кто программирует под Android
1747418743
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);
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79624440/weird-ram-overload-with-async-task-on-arm32-android-api-27[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия