Wpis z mikrobloga

Mirki,

jestem nubem jezeli chodzi o c# wiec stad pytanie. Chce wciągnąć dane do gry z pliku (lista pytań). Chciałbym szybko wyszukiwac, usuwac, modyfikowac dane. Bedzie to jedna tabela, lista czy cokolwiek. Pytanie wiec, co do tego najlepiej uzyc? Dictionary, list, datatable? Ilość wierszy to myślę max 10k (kiedyś w przyszłości).

Myślałem czy by tego po stronie bazy danych nie zrobić, ale może mogę to upchać w c#?

Jeśli po stronie bazy danych to problemu nie bede mial raczej z czytaniem tych danych, ale pytam bo chce to zrobic optymalnie ;)

#unity #gamedev #csharp
  • 14
10k za każdym razem ładować w obiekt to raczej nie jest dobry pomysł, lepiej trzymać to po stronie bazy i dociągać dany zestaw pytań. Dictionary ma Key oraz Value więc nie widzę zastosowania w tym przypadku.
@Radeg90: no wlasnie bardziej myslalem nad mysql jakims, bo sqllite mnie drazni mocno ;)

ale moze dlatego, ze bawilem sie sqllite w unreal engine. Sprobuje sprawdzic jak to wyglada w Unity.
@Cin: w sensie DataTable? musze poszukac tutka, ostatni raz keidy dlubalem coś w c# to bylo 4 lata temu.

moge to wszystko zakodowac po stronie c# / unity, czy musze stawiac jakas baze lokalnie?
@000loki: zależy co chcesz zrobić, generalnie, jeśli masz listę pytań statyczną i ona się nie zmienia to nie ma sensu na każdym razem odpytywać serwera o listę pytań, bo odpowiedź dostaniesz w tekście itp. Zajmuje to sporo pamięci i długo zajmuje przetworzenie. Alternatywą jest raz wczytanie jej z bazy danych, która potem na urządzeniu umieści się w pamięci ram i wykonać serializację(zapis bitowy na pamięci trwałej z pominięciem algorytmów przetwarzających), czyli
@Cin: pytania będą się zmieniać, ale to będzie raz na jakiś czas. Myślałem, żeby po prostu zrobić sobie osobną małą bazę do edycji tych pytań i eksportu do pliku (dostęp będzie miało z 5 osób) i to jest sprawa bardzo prosta. Potem, przy każdym starcie aplikacji ładować plik do pamięci i po tym wyszukiwać.
@000loki: zrób sobie pole w bazie danych o nazwie np. "ostatnia edycja bazy danych" które będzie aktualizowane za każdym razem jak będziesz edytował wpis w bazie danych. Do tego dodaj w aplikacji by ściągała bazę danych i aktualizowała te informację o ostatniej aktualizacji bazy danych. Za każdym razem potem jak aplikacja będzie włączana niech porównuje informacje zapisaną w aplikacji o ostatniej aktualizacji bazy danych z tą samą informacją z główną bazą
@000loki: generalnie nie rób osobnej bazy. Wystarczy jedna np. w sql zrob sobie tabele z pytaniami i dodatkowa z ta informacja o ostatniej aktualizacji. Ta druga moze miec tylko jeden wiesz typu int gdzie system bazodanowy wpisuje date unixowa ostatniej aktualizacji
@Cin: no tak, ale ja chcialem calkowicie odciac sie od sciagania listy pytan, czy robienia lookup zeby sprawdzic czy mamy jakies zmiany w bazie czy nie. Gra ma dzialac calkowicie offline, wiec bazowo dobrze by bylo, gdyby pytania byly zapisane w pliku.
@000loki: no to w unity możesz dodać plik jako asset np. csv (oddzielany przecinkami) a potem go za każdym razem aktualizować. myślałem, że chcesz aktualizować co jakiś czas baze i pobierać aktualizację danych, bo w tym przypadku co teraz piszesz będziesz musiał po prostu zrobić aktualizację aplikacji by pobrać nowe dane. Tak czy siak obie opcje są do zrobienia :)
@Cin: no wlasnie raczej w ta druga opcje pojde. Baze danych sobie zrobie do obslugi dla mnie i kumpla, zeby nam bylo prosciej, a pytania bede eksportowal i wrzucal do aplikacji. Mysle tylko, jak tam potem te dane obslugiwac, ale to chyba zrobie zwykla liste i tyle. Martwi mnie tylko ich ilosc.
@Cin: ogarnąłem dość szybko tą serializacje na typie list i zaraz zrobie test czy dziala sprawnie. Myslalem, ze wiecej bedzie z tym zabawy, a to proste cholernie ;) dzięki!