Diskuze: Dvojte připojení do MySQL DB.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
no chtelo by to videt tu "nepodstatnou" logiku v myFunction a z jake metody je volan ukazany kod.
Tady se volá každou sekundu moje funkce
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += new ElapsedEventHandler(myFunction);
aTimer.Interval = 1000;
aTimer.Enabled = true;
aTimer.Start();
}
}
A daná funkce je tady:
Database database = new Database();
List<Dictionary<string, string>> selectResult = database.Select("finish_auction", new string[] {
"ID","item" }, "", new object[] { }, "", 0);
která mi vrací seznam záznamů.
A tady je metoda Select
public List<Dictionary<string, string>> Select(string table, string[] attributes, string condition, object[] arguments, string orderBy, int count)
{
try
{
Connect();
MySqlDataReader reader = command.ExecuteReader();
...
}
....
finally
{
Disconnect();
}
Posílám to zkráceně. Opravdu je zde logika naprosto nepodstatná k danému problému
Proste se tento Select zavolá ve stejnou dobu vícekrát. Jednou z normálního dotazu na REST API, a po druhé z toho tickeru. A to mu asi vadí.
Nevím, jak to funguje s MySQL, ale když jsem se do podobného problému dostal s MS SQL, tak mi pomohlo do ConnectionStringu přidat
MultipleActiveResultSets=true
v MySQL tento attribute neexistuje. Ale zkouším něco podobného najít.
Ted jsem se dočetl že když vytvořím nové připojení na MySQL tak by to
mělo být v pohodě.
Jenomže ja ho vytvářím na zacatku kazdého dotazu metodou Connect().
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
connection = new MySqlConnection(constr);
command = new MySqlCommand();
command.Connection = connection;
connection.Open();
Takže opravdu nevím kde by mohl být problém
Ano, nové připojení jo, ale když jsem tak pročítal web, všude se píše, že MySQL prostě nepodporuje mít dvě "připojení" otevřená najednou... Máš nějaký důvod používat právě MySQL a ne MSSQL?
z kodu je evidentni ze "connection" je instancni promena. problem je ze to,
ze neni vubec nijak synchronizovana:
uzivatel klikne na tlacitko
spusti se metoda Connect() <contextSwitch>
trigne se casovac Connect(),Disconnect() <contextSwitch>
a puvodni metoda pracuje nad disposnutym spojenim a puvodni spojeni je v memory
leaku.
Problém byl v tom že opravdu MySQL tohle nepodporuje.
Vyřešil jsem to tak ze jsem vytvořil novou instanci připojení. Takže nový
connection string v configu a dal jsem mu jiné jméno. Tohle řešení se mi
ale vůbec nelíbí tak přecházím na MSSQ, které tohle podporuje.
Každopádně díky moc 
Zobrazeno 10 zpráv z 10.
