Mam tabelę z Guid
jako klucz podstawowy. Tabela zawiera już wiele wierszy. Mam również win service
, który wykonuje pewien zestaw akcji z każdym wierszem (możliwe potrzeby odczytu i zapisu danych z innych baz danych). Przetwarzanie jednego wiersza zajmuje dużo czasu. (Średnio około 100 sekund)Potrzebuję funkcji contributon dla moich instancji usługi wygranych
Moja wygrana usługa działa tak:
public class MyDto
{
public Guid Id { get; set; }
}
while (true){
if(time to start){
List<MyDto> rows = LoadData();
foreach(MyDto obj in rows){
Process(obj);//it takes in average about 100 sec
}
}
}
muszę skrócić czas wykonywania wszystkich moich wierszy. Z pewnych powodów zdecydowałem się na wzrost wartości mojej usługi wygranej. Potrzebuję więc, aby każda usługa wygrywała własny zestaw wierszy.
Mam parametryzowane mój LoadData()
zabawy:
public List<MyDto> LoadData(int winServInstanceNumber){
}
Więc muszę funkcja wkładu zależy od sumy wystąpień usług wygrana liczyć i concreate serwis wygrana liczba instancji.
można zaoferować coś lepszego niż
//on .net side
obj.Id.GetHashCode()%totalWinServiceInstancesCount
lub
--on sql side
HASHBYTES('MD5', CAST(id as varbinary(16)))%totalWinServiceInstancesCount
Dobra uwaga, dziękuję za odpowiedź, ale pytałem o funkcję składki. BTW zagłosuj na swoje rozwiązanie – isxaker
@isxaker Przepraszamy, może coś pominę tutaj.Myślałem, że twoje pytanie dotyczyło przyspieszenia przetwarzania danych zamiast "foreach (MyDto obj in rows)". Czy możesz wyjaśnić, co to znaczy dla ciebie "funkcja składki"? Dzięki –
Jest to funkcja (wygląda jak funkcja skrótu), zależy od jednego (numer aktualnej instancji win serv) lub dwóch (numer bieżącej instancji win serv i całkowitej liczby usług wygranych) ustawień globalnych. Również ta funkcja ma jeden parametr wejściowy (GUID w moim przypadku). Funkcja musi wykonać pewne "magiczne" z wartością wejściową i return int number należy [0; totalWinServInstancesNumber -1]; wygląda jak jakiś skrót od Guida w moim przypadku. – isxaker