5

Moja aplikacja ma problemy z wydajnością, więc zacząłem badać to od strony głównej: "Połączenie z bazą danych".Aby zamknąć lub nie zamknąć połączenia Oracle?

najlepszych praktykach mówi: „Otwiera połączenie, użyj go i blisko jest tak szybko, jak to możliwe”, ale nie wiem napowietrznej że to powoduje, więc pytanie brzmi:

1 - "Otwórz, użytkowania , Zamknij połączenia tak szybko, jak to możliwe, to najlepszy sposób korzystania z ODP.NET? "

2 - Czy istnieje sposób i jak korzystać z łączenia połączeń z ODP.NET? Zastanawiam się nad stworzeniem Listy do przechowywania ciągów połączeń i tworzenia logiki, aby wybrać "najlepsze" połączenie za każdym razem, gdy potrzebuję. Czy to najlepszy sposób na zrobienie tego?

+2

Czy mówisz o aplikacji klient/serwer? Lub aplikacja trójwarstwowa? Czy twierdzisz, że profilowałeś aplikację i ustaliłeś, że otwieranie i zamykanie połączeń z bazami danych jest wąskim gardłem? A może zgadujesz, że problemy z wydajnością mogą być związane z bazą danych? –

+1

Czyją to najlepsza praktyka? Otwarcie połączenia z bazą danych jest kosztowną i czasochłonną operacją.Dlatego najlepszą radą jest utrzymywać połączenia otwarte i używane przez jak najdłuższy czas. – APC

+0

Justin. Tak, jest to aplikacja Asp.Net, więc jest to klient/serwer, z 3 lub 4 warstwami, "Otwarta operacja połączenia" nie jest wąskim gardłem, ale myślę, że przyczynia się do spadku wydajności (jeśli nie jest używany poprawnie). – Ewerton

Odpowiedz

6

Oto pokład slajdów zawierających Oracle zaleca najlepszych praktyk:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

automatycznie uzyskać puli połączeń podczas tworzenia OracleConnection. W przypadku większości aplikacji o średnim poziomie chcesz z tego skorzystać. Będziesz także chciał dostroić swoją pulę do realistycznego obciążenia, włączając liczniki wydajności w rejestrze.

Aby uzyskać szczegółowe informacje na temat łączenia połączeń, zobacz pomoc online ODP.NET. Ustawienia puli są dodawane do ciągu połączenia.

Inną kwestią, którą ludzie często mają z OracleConnections, jest to, że śmieciarz nie zdaje sobie sprawy z tego, jak bardzo są wymagający zasobów i nie czyści ich szybko. Potęguje to fakt, że ODP.NET nie jest w pełni zarządzany, a więc niektóre zasoby są ukryte w garbage collectorze. Dlatego najlepszą praktyką jest zamykanie() i usuwanie() wszystkich obiektów Oracle ODP.NET (w tym OracleConnection), aby wymusić ich wyczyszczenie.

Ten szczególny problem zostanie złagodzony w Oracle w pełni zarządzanego dostawcy (beta ukaże się wkrótce)

(EDIT: ODP.NET udało kierowcy jest już dostępna.)

Christian Shay

Oracle

1

ODP.NET jest dostawcą danych dla ADO.NET. Najlepsza praktyka ADO.Net to Open, Get Data (do pamięci), close, użyj w danych pamięci. Na przykład za pomocą OracleDataReader, aby załadować dane w DataTable w pamięci i zamknąć połączenie.

[] 's

0

W przypadku pojedynczej transakcji jest to najlepsze rozwiązanie, ale w przypadku wielu transakcji, w przypadku których użytkownik zostanie zatwierdzony na końcu, może to nie być najlepsze rozwiązanie. Musisz zachować połączenie otwarte, dopóki transakcja nie zostanie zatwierdzona lub wycofana. Jak sobie z tym poradzić, a także jak sprawdzić, czy połączenie nadal istnieje w tym przypadku? (Np. Awaria sieci) Istnieje właściwość ConnectionState.Broken, która nie działa w tym momencie.

Powiązane problemy