Bardzo długie pierwsze łączenie z baza.

0

Witam,
Napisałem mój pierwszy większy program(w C#), który korzysta z bazy SQL'a. Mam pewien problem. Pierwsze połączenie z bazą zawsze trwa do 10 sekund, i jest to bardzo uciążliwe. Każde kolejne, trwa ułamek sekundy, więc nawet trudno to zauważyć. I tak jest przy każdym uruchomieniu komputera. Jeżeli połączę się pierwszy raz(ten długi raz) i komputera nie wyłączę przez np. 6 godzin, to program będzie się szybko łączył szybko przez te 6 godzin, aż do czasu kiedy go uruchomię ponownie. Wtedy znowu pierwsze połączenie trwa do 10 sekund, i każde kolejne ułamek sekundy. Wie ktoś może, co zrobić w tej sytuacji? Co może być tego powodem?
Z góry dziękuję, pozdrawiam.

0

być może usługi bazy danych są uruchamiane w momencie pierwszego połączenia.
Uruchom sobie services.msc (przez start uruchom), poszukaj czegoś w stylu MSSQLSERVER i zobacz jak tam jest: Automatic czy Manual, jak manual to jest tak właśnie jak myślę.

Jak przestawisz na automatic to będzie Ci się uruchamiać przy starcie systemu-czyli serwer bazy będzie działał zawsze, spowalniał komputer przy starcie itp. Ocen co Ci się bardziej opłaca

0

Jeśli usługa serwera jest wyłączona, to program nie powinien się połączyć.
No, chyba że jest w nim kod sprawdzający czy usługa jest włączona i ew. uruchamiający ją, ale nigdy się z czymś takim nie spotkałem.

0

Jest tam ustawione tak jak być powinno. Dodam, że dzieje się tak na dowolnym komputerze na jakim włączam program ;/ . Jakieś inne sugestie?

0

tak :)

pooling - sprawdz czy masz wlaczony.
Jesli nie to obiekty dostepowe sa tworzone a nie pobierane

0

Do connection stringa dorzucam "Pooling=True", ale jest bez zmian. Dałem też w connectionstringbuilderze pooling na true, ale dalej to samo. Ogólnie mój connection string wygląda tak: connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dbPlanZajec.mdf;Integrated Security=True;User Instance=True"
Może to coś komuś podpowie.
A tu z desperacji kod mojej klasy którą używam do łączenia z bazą i pobierania tabelek.

        #region Zmienne
        private string conStr = ConfigurationManager.ConnectionStrings["PlanZajecSQL"].ConnectionString; //"Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\dbPlanZajec.mdf;Integrated Security=True;User Instance=True"; ConfigurationManager.ConnectionStrings["PlanZajecSQL"].ConnectionString;
        private SqlDataAdapter dAdapt = null;
        SqlCommandBuilder builder = null;
        private string tabelaName;
        #endregion



        #region Metody
        /// <summary>
        /// Konfiguruje adapter(?). Dla kontruktora.
        /// </summary>
        private void ConfigureAdapter()
        {
            SqlConnectionStringBuilder strBuilder = new SqlConnectionStringBuilder(conStr);
            strBuilder.ConnectTimeout = 20;
            dAdapt = new SqlDataAdapter("Select * From " + tabelaName, strBuilder.ConnectionString);
            builder = new SqlCommandBuilder(dAdapt);
        }

        /// <summary>
        /// Czyta tabelę.
        /// </summary>
        public DataTable GetTable()
        {
            DataTable tab = new DataTable(tabelaName);
            dAdapt.Fill(tab);
            return tab;
        }

        /// <summary>
        /// Uaktualnia tabelę.
        /// </summary>
        public void UpdateTable(DataTable modifiedTable)
        {
            builder.GetUpdateCommand();
            dAdapt.Update(modifiedTable);
        }
        #endregion

        #region Konstruktory
        public DbService(string tabelaName_)
        {
            tabelaName = tabelaName_;
            ConfigureAdapter();
        }
        #endregion

0

Z tego co pamiętam, to przy pierwszym zapytaniu do bazy (chyba przy zapytanieu, a nie połączeniu) ADO odczytuje wszystkie informacje dotyczące GetSchema. Jeśli masz dużo obiektów, to będzie to długo trwać. A jeśli jeszcze pierwsze zapytanie będzie długotrwałe, to już zupełny koszmar... Dlatego sswego czasu od razu po połączeniu dawałem zapytanie typu SELECT 1

0

nie podoba mi sie ten conect string.
Wygeneruj go za pomoca ODBC

1 użytkowników online, w tym zalogowanych: 0, gości: 1