¿Cómo escribo un método de actualización asincrónico para pasar dos parámetros utilizando RestSharp?
Estoy trabajando en una aplicación de robótica en Unity y quiero pasar continuamente dos parámetros desde mi aplicación a un cliente. El código que he escrito hace que la aplicación se ejecute extremadamente lenta (aproximadamente 1 cuadro cada 5 segundos) y debe ser un problema con mis solicitudes asincrónicas, pero no estoy seguro exactamente de dónde está el problema:
async void FixedUpdate()
{
var client = new RestClient("http://localhost/rw/motionsystem/mechunits/ROB_1?action=mechunit-position");
client.Timeout = -1;
client.CookieContainer = login_cookie;
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded;v=2.0");
request.AddParameter("rob_joint", manualjog);
request.AddParameter("ext_joint", "[0,0,0,0,0,0]");
var restResponse = await client.ExecuteTaskAsync(request);
}
davy.ai
Analizando el Código
El código proporcionado utiliza el método
FixedUpdate
conasync
dentro de Unity, el cual se llama una vez por frame. Dentro de este método, se instancia unRestClient
para realizar una solicitud POST utilizando la libreríaRestSharp
. La URL del punto de conexión para la solicitud a la API eshttp://localhost/rw/motionsystem/mechunits/ROB_1?action=mechunit-position`. Se pasan dos parámetros con la solicitud:
rob_jointy
ext_joint`.El código utiliza
await
para realizar una solicitud asíncrona y obtener la respuesta en forma de un objetorestResponse
.Encontrando el Problema
El problema que está causando que la aplicación se ejecute extremadamente lenta podría estar relacionado con el parámetro de tipo string
ext_joint
que se pasa al servidor. Parece queext_joint
podría ser un objetoJSON
serializado, pero se está pasando como una cadena de texto, lo cual puede hacer que la recolección de basura de Unity se ejecute con más frecuencia y, por lo tanto, ralentizar el rendimiento.Solución
Para solucionar este problema, necesitamos serializar el objeto
JSON
a una cadena de texto antes de pasarlo como parámetro. A continuación se muestra un fragmento de código actualizado:En el código actualizado, utilizamos la librería
Newtonsoft.Json
para serializar el parámetroext_joint
. Se crea y se serializa el objetoext_joint
utilizando el métodoJsonConvert.SerializeObject
, luego se pasa como parámetro con el nombreext_joint
.Mediante el código anterior, podemos solucionar el problema de rendimiento y pasar continuamente los dos parámetros desde la aplicación al cliente.