Używam Linq do SQL przeciwko Sql Server CE.
Baza danych jest tylko do odczytu, więc mogę mieć kilka założeń.
W celu powstrzymania się od dostępu do systemu plików, moje początkowe podejście polegało na buforowaniu potrzebnych jednostek do pamięci aplikacji i użyciu linq do obiektów przeciwko nim.
Chociaż działa dobrze w przypadku ograniczonych zapytań, bezpośrednie użycie Linq do SQL jest lepsze niż Linq to Objects, gdy dołącza się w razie potrzeby.
Wracając do punktu wyjścia, chcę zoptymalizować moje występy, teraz myślę o wymuszeniu załadowania całego pliku do pamięci RAM i użyciu Linq do SQL przeciwko niemu.
Jakieś myśli o tym, jak to zrobić? Więcej pomysłów?
Ariel
Odpowiedzi:
1 dla odpowiedzi № 1Wygląda na to, że twój problem to wskaźnik SQL / wydajność klucza obcego a wydajność iteratora kolekcji.
Linq to Datasets oferuje sposób na zachowanierelacje (w szczególności ADO.net Zbiory danych mają kolekcję relacji) i mogą wymuszać klucz podstawowy, klucz obcy i unikalne ograniczenia. Ich wydajność łączenia powinna być podobna do Linq do SQL, ale będzie działać w pamięci.
Z mojego rozumienia implementacji Lite sql, transakcje mogą mieć duży wpływ na wydajność, więc po prostu rozpoczynanie połączenia z
BEGIN TRANSACTION
może mieć znaczący wpływ, jeśli możesz pozostawić połączenie otwarte dla wszystkich zapytań. Benchmarking to chyba jedyny pewny sposób, aby odpowiedzieć na to pytanie.
0 dla odpowiedzi nr 2
Próbowałeś Linq do DataSet?
możesz załadować wszystko w pamięci i możesz użyć zapytania Linq
Nie mam pojęcia, czy join będzie działał tak, jak chcesz