konto usunięte

Temat: C#, .NET4, MemoryMappedFile

Witam, czy ktoś miał okazję przetestować tę nowość z .NET4? Może jakieś wrażenia z wydajności, np. dostepu do plików 1Gb i więcej?

Dzięki.

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

Ciężko nazwać to nowością, jest to po prostu wrapper o funkcję WINAPI która istniała od zawsze w systemie, z tym wyjątkiem że teraz jest to cześć platformy gdzie dołożono całą opiekę o CAS.

Co do samej wydajności funkcji natywnej pliki 1 gb i więcej będą raczej nie wydajne, natomiast nie testowałem tego z kodu C#.
Michał Jasiorowski

Michał Jasiorowski Inżynier ds.
oprogramowania

Temat: C#, .NET4, MemoryMappedFile

Jakiś czas temu zadałem podobne pytanie. Do tej pory już zdążyłem to przetestować i sprawdzić.
Jeżeli chodzi o wydajność to testowałem na plikach do 50GB i generalnie losowy dostęp do poszczególnych części pliku jest praktycznie na stałym poziomie. Jeżeli chodzi o RAM to zgodnie z założeniem nie zużywa zauważalnie.

Z tego co testowałem to prędkość zapisu jest praktycznie zbliżona do możliwości dysku (niewielki narzut).

Jeżeli masz do przetworzenia naprawdę duże pliki to spokojnie mogę polecić.

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

Michał, dzięki bardzo za info, a może jeszcze pamiętasz mniej-więcej jakie czasy były? Ja wiem, że to bardzo zależy od sprzętu, konfiguracji, co czytałeś / zapisywałeś etc. ale rząd wielkości: do 100ms, 100-300ms czy więcej? No i jeszcze z jakim buforem (ile kb) był zapis / odczyt.
Michał Jasiorowski

Michał Jasiorowski Inżynier ds.
oprogramowania

Temat: C#, .NET4, MemoryMappedFile

Jeśli chodzi o bufor to nie stosowałem żadnego ponieważ MMF wykorzystuje już własne wbudowane. Więc nie było sensu.

Jeśli chodzi o wydajność, to co robiłem to był mechanizm składu danych w obiektowej bazie danych. To co może dać mniej więcej pojęcie o wydajności to operacja zapisu na którą składało się: serializacja (własny mechanizm), dodanie informacji do 2 drzew binarnych + jeszcze kilka innych operacji pomocniczych.
Na Core i7 2.8 (8 wątków), 2 dyski 500GB w RAID0 i 6GB ramu udało się zapisywać ok. 100 000 obiektów na sekundę gdzie każdy po "serializacji" zajmował ok. 70B.
Oczywiście w między czasie były flush'e na dysk.
Spory narzut tu miała cała otoczka więc wynik nie jest powalający. Ale daje to jakiś punkt odniesienia.
To co pisałem o szybkości zapisu zbliżonej do możliwości dysku to oczywiście jak przeprowadzane były tylko zapisy surowych bajtów bez żadnych udziwnień.

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

100K w sekundę to w sumie "dużo", szczególnie pod kątem zastosowań konsumenckich; no i też pociesza mnie fakt, że u mnie będą potencjalnie większe pliki niż 70B, sumarycznie będzie ich mniej więc powinno być trochę lepiej... Z drugiej zaś strony testowałeś na RAIDzie, a on jest zawsze szybszy niż pojedynczy dysk, a ja właśnie w taką konfigurację muszę celować.

No nic, dzięki, zachęciłeś mnie na pewno do właśnych testów :)
Michał Jasiorowski

Michał Jasiorowski Inżynier ds.
oprogramowania

Temat: C#, .NET4, MemoryMappedFile

Nie wiem czy mnie dobrze zrozumiałeś, bo piszesz, że będziesz miał większe pliki niż 70B. Ja pisałem o jednym pliku 50GB do którego zapisywałem paczki po 70B :)

Jeśli chodzi o zwykłe dyski, to dla porównania: laptop, procek C2D 2.2, 4GB ram, dysk 160GB 7200 obr zapis (sprawdzany HD Tune) ok. 55MB/s.
Wynik: ok. 60k obiektów na sekundę.
Spadek jak widać jest ale bardziej chodzi tu o resztę sprzętu nie o dysk. Bo on podejrzewam ma jeszcze zapas i można wycisnąć więcej :)

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

Michał Jasiorowski:
Nie wiem czy mnie dobrze zrozumiałeś, bo piszesz, że będziesz miał większe pliki niż 70B. Ja pisałem o jednym pliku 50GB do którego zapisywałem paczki po 70B :)

No chyba tak :) Ja będę miał maks 1-2GB i paczki od 100KB do 10MB.

Wynik: ok. 60k obiektów na sekundę.

Trochę kiepsko, w sumie sprzęt nie jest jakiś archaiczny...
Michał Jasiorowski

Michał Jasiorowski Inżynier ds.
oprogramowania

Temat: C#, .NET4, MemoryMappedFile

Sergiusz B.:
Trochę kiepsko, w sumie sprzęt nie jest jakiś archaiczny...

Fakt ale jak mówiłem, to dopiero pierwsze stadium rozwoju, dużo zostało do zoptymalizowania jeszcze (a jest sporo miejsc) :) Oczywiście mówię tu o swoich mechanizmach, akurat MMF ma bardzo mały wpływ w porównaniu z nimi (sprawdzane profiler'em).

Jeśli chodzi o twoje dane, to myślę, że nie ma problemów. Oczywiście zależy z jaką częstotliwością chcesz je zapisywać.

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

Michał Jasiorowski:

akurat MMF ma bardzo mały wpływ w porównaniu z nimi (sprawdzane profiler'em).

Tak, kod .NET jest b. dobrze zoptymalizowany w wielu miejscach więc narzut platformy jest pewnie minimalny.

Jeśli chodzi o twoje dane, to myślę, że nie ma problemów. Oczywiście zależy z jaką częstotliwością chcesz je zapisywać.

Przy starcie aplikacji, załadować tak ok 300-500MB no i później w trakcie, ale też w kontrolowanych warunkach i wszystko na raz.
Dane będą trzymane w jednym albo dwóch, maks trzech plikach po ok 1GB.Sergiusz B. edytował(a) ten post dnia 08.06.10 o godzinie 20:39
Michał Jasiorowski

Michał Jasiorowski Inżynier ds.
oprogramowania

Temat: C#, .NET4, MemoryMappedFile

Sergiusz B.:
Przy starcie aplikacji, załadować tak ok 300-500MB no i później w trakcie, ale też w kontrolowanych warunkach i wszystko na raz.
Dane będą trzymane w jednym albo dwóch, maks trzech plikach po ok 1GB.[edited]

Co rozumiesz przez "załadowanie"?

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

Michał Jasiorowski:

Co rozumiesz przez "załadowanie"?

Wczytanie 300-500MB do pamięci. Tak w ogóle to chodzi o grę w XNA :)
Michał Jasiorowski

Michał Jasiorowski Inżynier ds.
oprogramowania

Temat: C#, .NET4, MemoryMappedFile

Sergiusz B.:
Michał Jasiorowski:

Co rozumiesz przez "załadowanie"?

Wczytanie 300-500MB do pamięci. Tak w ogóle to chodzi o grę w XNA :)

Hehe, w sumie ciekawy pomysł :) To myślę, że nie będzie problemu z wydajnością.
W takim razie życzę powodzenia, w razie problemów służę pomocą :)

PS. W XNA się kiedyś bawiłem, był to prymitywny snejk co zasuwał po wycinku sfery, oczywiście w 3D :) O wydajności nie będę się wypowiadał bo była masakryczna, ale to raczej wina projektu gry bo to była pierwsza i ostatnia.

konto usunięte

Temat: C#, .NET4, MemoryMappedFile

No ja też dopiero zacząłem, na razie pracuje nad terenem:

http://picasaweb.google.pl/sbezniakow/XNA#548049308861...

:)

MMF chcę wykorzystać do zarządzania assetami - ładuje tekstury, siatki, etc. z jednego dużego pliku, który wewnątrz ma jakąś tam strukturę. Więc w sumie Twoje testy są bardzo obiecujące pod tym kątem, szczególnie, że zakładam, że jak już dokończę moją grę to pewnie ośmiordzeniowy procek będzie standardem ;)

Następna dyskusja:

MS 20486 Developing ASP.NET...




Wyślij zaproszenie do