|
|
Közzétéve 2018. 05. 21. 13:55:48
|
|
|

Az elmúlt két napban egy meglehetősen frusztráló problémába ütköztem: egy körülbelül 120 sorból álló tárolt eljárást futtattak az SQL Server 2012 lekérdezési analizátorában, A sebesség nagyon ideális, és körülbelül 500 adatrekordot lehet szűrni és rögzíteni kevesebb mint 1 másodperc alatt. Azonban amikor a C# programkódot hívják, a kapcsolat időtúllépése jelentkezik. Állítsd be a CommandTime-outot 300-ra, és körülbelül 3 perc alatt jelenik meg. Többször is ellenőriztem a kódot, és nem találtam hibát. A probléma továbbra is fennáll.
Ok-elemzés: 1. Mert a lekérdezés-analizátor végrehajtási sebessége gyors, és az adatmennyiség nem nagy. 2. Csak a programban történő hívás lassú. 3. Állítsd be a CommandTimeout paramétert, és az eredmény megjeleníthető, de ez sokáig tart.
Összefoglalva, előzetesen arra a következtetésre jutottunk, hogy a probléma a C# kódban rejlik. De az ellenőrzés után nem volt nyereség.
Nézd meg ezeket az információkat a Baidu-n. Végre találtam egy hasonló információs bejegyzést a CSDN fórumon. Az egyik netikus válaszában azt mondta: "Lehetséges, hogy a végrehajtási terv lejárt." Igazán felébresztett az álmomban.
Azonnal végezze el a lekérdezési analizátoron:
Újra teszteltem a programot, ezúttal végre működött. A sebesség nagyon kielégítő.
Ok-elemzés: Mivel a tárolt eljárások előre fordítottak, az első végrehajtáskor egy végrehajtási tervet generálnak, és ezt a végrehajtási tervet használják a későbbi végrehajtásoknál (hacsak a tárolt eljárás újrafordítása nem történik), ahelyett, hogy minden végrehajtáskor generálnának végrehajtási tervet. Amikor a tárolt eljárásban részt vevő objektumstruktúrát módosítják, vagy a kapcsolódó adatok jelentősen megváltoznak, ami miatt az eredeti terv nem lesz alkalmas a jelenlegi állapotra (végrehajtási terv lejárta), a tárolt eljárást újra kell fordítani.
Végül csatoljuk a tárolt eljárás kódját:
|
Előző:Oszd meg egyetlen APP promóciós oldal kódforrását, adaptív, nagyon szép és nagylelkű!Következő:C# Nyílt Forráskódú Keretrendszer (Újranyomás)
|