Wydajność/Ograniczenia API oraz winddows vs linux

0

Wystawiłem sobie proste API

/add
/getAll

i chciałem dla testu sprawdzić wydajność i napisałem prosty program (pseudokod)

int i = 1;
while (true)
{
	sendGET("/getAll");
	Thread.Sleep(100);
	sendPOST("/add", i);
	Thread.Sleep(100);
    Console.WriteLine(i);
	i++;
}

I zauważyłem, że daje to radę wysłać np. 200x POST (czyli też 200x GET),a później strasznie spowalnia kilka następnych requestów mp. 3 requesty mieli 30sec, odcina się i powtarza cyklicznie.

W kontrolerze typowo

public List<Item> getAll()
{
	return (_context.Items.OrderBy(x => x.Id).ToList());
}

public IActionResult Add(Model model)
{
	_context.Items.Add(map model to Item);
	
	_context.SaveChanges();
	
	return OkResult;
}

O co chodzi? GarbageCollector? Mam ustawić limity API np. max 30 na minutę?

Dodatkowo, gdy sprawdziłem te appke na linuxie z mssql na dockerze i proste reverse proxy, to nic się nie zawieszało, ale później baza na dockerze mi padla :D

a zatem soft microsoftu działa lepiej na linuxach? :O

2

a zatem soft microsoftu działa lepiej na linuxach? :O

Z testów na Phoronix.com wynika iż Linux ma znacznie wydajniejsze systemy plików niż Windows jeśli chodzi o operacje na sekundę, ale nie ręczę, że testy są 100%-owo miarodajne.

0

Cóż, to pobieranie danych z bazy jest w całości synchroniczne, a powinno być asynchroniczne, prędzej uderzasz w limit połączeń do bazy, niż wyciągasz maks z webapi.

0

Nie testujesz tego czasem na włączonym debug mode ?. Ile rekordów zapisujesz naraz?

0

Pokaż jak wyglądają zapytania get i post.

0

@Sunnyline2:

public static async Task GET(string url)
{
    var responseString = await client.GetStringAsync(url);
}
public static async Task POST(string url, int id)
{
    string myJson = (...);

    var response = await new HttpClient().PostAsync(url, new StringContent(myJson, Encoding.UTF8, "application/json"));
    var contents = await response.Content.ReadAsStringAsync();
}
0

smutny ogorek, ale to co robisz to zapychasz MessageHandler... Tak sie nie wywoluje requestów w c#

do poczytania
https://www.stevejgordon.co.uk/introduction-to-httpclientfactory-aspnetcore

uzyj httpfactory albo po prostu nie tworz tak wiele httpclient (jedna instancja wystarczy)

0
fasadin napisał(a):

smutny ogorek, ale to co robisz to zapychasz MessageHandler... Tak sie nie wywoluje requestów w c#

do poczytania
https://www.stevejgordon.co.uk/introduction-to-httpclientfactory-aspnetcore

uzyj httpfactory albo po prostu nie tworz tak wiele httpclient (jedna instancja wystarczy)

Dlaczego dochodzi do zapchania messageHandler gdy aplikacja jest odpalona na windowsie z "natywnym" mssql, a na linuxie + docker(mssql) nie?

0

Dla pewności, to wysyłanie post/get to tylko "stresser" api.

public static async Task GET(string url)
{
    var responseString = await client.GetStringAsync(url);
}
public static async Task POST(string url, int id)
{
    string myJson = (...);
 
    var response = await new HttpClient().PostAsync(url, new StringContent(myJson, Encoding.UTF8, "application/json"));
    var contents = await response.Content.ReadAsStringAsync();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1