| Autor | Správa |
dEVIANT
 Užívateľ
 Založený: 04.12.2008 Príspevky: 59
 | Zaslal: Pi 02.04.10 16:35 |   |
Dá sa nejako pomocou napr. Singletonu spraviť, aby sa mi po spustení aplikácie otvorilo spojenie na Oracle DBS, a po skončení uzavrelo?
Myslím,žeby mi to určite zrýchlilo aplikáciu, keďže by sa pri dotazoch nemusel stále otvárať spojenie atď.
Poprosil by som konkrétny kus kódu...skúšal som to nejako takto...
| kód: | private static OracleConnection connection = new OracleConnection(oradb);
private DatabaseControl() { connection.Open(); }
public static DatabaseControl Instance
{
get
{
if (instance == null)
{
instance = new DatabaseControl();
}
return instance;
}
} |
No ale keď som potom z jednej metódy vymazal using (connection = new OracleConnection(oradb))
{ ... }, resp. len using(connection) tak to nešlo...:/
Viete mi pomôcť? |
_________________ Robím, čo možem. Keď nerobím, nemožem. | |
   |
 |
Ezekiell
 Užívateľ
 Založený: 26.09.2007 Príspevky: 53 Bydlisko: Zákopčie, Kysuce
 | Zaslal: Pi 02.04.10 20:22 |   |
Tak v prvom rade ked pouzijes using bez vytvorenia novej instancie tak po konci oboru platnosti definovaneho usingom sa automaticky pre ten objekt vola garbage collector a objekt ti zrusi.
To ale len tak pomimo. Osobne by som totiz urcite neriesil pripajanie na DB cez singleton. Pripojenie na databazu a odpojenie netrva zas tak dlho ako si ty predstavujes a ked uz by si to chcel optimalizovat tak optimalizuj len pripojenia v ramci nejakej aktivity (myslim tymsubor cinnosti medzi dvoma vstupmy od uzivatela) ale nie pocas behu celej aplikacie. Nech sa vyjadri aj niekto iny ale podla mna je to blbost.
Neviem aku velku aplikaciu mas ale pokial si myslis ze kvoli DB pocitujes zmenu vykonu tak by si sa mal skor zamerat na optimalizaciu databazy a poctu pripojeni a nie riesit to takymto "hackom".
Ale je to len moj nazor. |
_________________ Život by bol jednoduchší, keby sme k nemu mali zdrojový kód! | |
    |
 |
mbc
 Užívateľ
 Založený: 20.07.2008 Príspevky: 411 Bydlisko: Mokrance
 | Zaslal: Pi 02.04.10 20:33 |   |
singleton neodporucam z vlastnej skusenosti
.NET pouziva connection pooling, takze otvaranie/zatvaranie pripojenia nespomaluje beh aplikacie
napr: http://msdn.microsoft.com/en-us/library/ms254502.aspx
napis komplet kod, ako robis dotazy na DB.... |
_________________ CPU: Q9550@3.4GHz + Noctua NH-U12P MB: Gigabyte P35-DS3R RAM: 4x2GB Geil Black Dragon VGA: Sapphire HD5770 + Accelero L2 Pro SSD: Corsair Extreme 64GB + Kingston V+ 64GB + Patriot PC25S HDD: WD10EARS + Silentmaxx + Scythe KamaBay + Noctua NF-S12-800 DVD: Samsung SH-S203D CASE: Compucase 6XG3 + 2xNoctua NF-S12B-FLX PSU: Seasonic X-650 AUDIO: Fubar4 + Creative I-Trigue 3500 + AKG K271 MOUSE: Logitech G500 + SteelPad QcK KEYB: Logitech Illuminated LCD: Benq FP241W PVA SAT: Skystar HD2 USB + SG2100 PERIF: RGT FF Pro + Logitech Chillstream + OKI Laser MFP B2500 PHONE: Galaxy S CARS: STI+VTS | |
    |
 |
dEVIANT
 Užívateľ
 Založený: 04.12.2008 Príspevky: 59
 |
Normále každý dotaz začína using connection...
Ezekiell, ten server je škólsky pre všetkých študentov...takže to bude asi v tom... |
_________________ Robím, čo možem. Keď nerobím, nemožem. | |
   |
 |
Ezekiell
 Užívateľ
 Založený: 26.09.2007 Príspevky: 53 Bydlisko: Zákopčie, Kysuce
 | Zaslal: So 03.04.10 11:49 |   |
A mas predstavu alebo odhad kolko krat sa aplikacia pripaja medzi jednotlivymi vstupmi uzivatela?
Myslim ze ked budes pouzivat
using (connection = new OracleConnection(oradb)) tak nemas problem. |
_________________ Život by bol jednoduchší, keby sme k nemu mali zdrojový kód! | |
    |
 |
nordic
 Užívateľ
 Založený: 15.05.2010 Príspevky: 1
 |
Co takto toto ? CommandBehavior.CloseConnection hned po execute.
| kód: |
public override DbDataReader GetCokolvek()
{
const string sqlString = @"SELECT [id] id, [name] text FROM dbo.countries (NOLOCK)";
Database.DatabaseConnection conn = DataLayer.DbContext.GetConnection();
using (DbCommand dbc = conn.CreateCommand(sqlString.ToString(), System.Data.CommandType.Text))
{
return dbc.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
}
|
|
| |
  |
 |
TJ
 Užívateľ
 Založený: 10.07.2009 Príspevky: 26
 | Zaslal: Po 21.06.10 15:14 |   |
No ja by som to urcite robil cez Singleton. V konstruktore otvoris spojenie a zabit ti to staci az uplne na konci programu, cez nejaku metodu Close(). |
| |
  |
 |
dEVIANT
 Užívateľ
 Založený: 04.12.2008 Príspevky: 59
 | Zaslal: Št 24.06.10 13:46 |   |
Dík za rady... riešim to ako odpojenú aplikáciu...teda sa zmeny v DBS neprejavu hneď ale až po uložení. |
_________________ Robím, čo možem. Keď nerobím, nemožem. | |
   |
 |
|