» »

[c#] da se program ne "obesi"

[c#] da se program ne "obesi"

japol ::

V beležnici imam zelo veliko teksta (baza), ko želim s svojim programom odpreti ta .txt in da vstavi tekst v textbox, se čez čas v debugerju prikaže sporočilo:
ContextSwitchDeadlock was detected
Message: The CLR has been unable to transition from COM context 0x21baac0 to COM context 0x21bad10 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.


Kako se v takih primerih popravi kodo?

black ice ::

Zakaj bi bazo nalagal v textbox? Za večjo količino teksta se malo boljše obnese RichTextbox.

japol ::

Ker gre za čisto enostaven tekst, nima stilov itd. Edino kar je, je količina ima preko 30.000 vrstic.

WarpedGone ::

Zadevo se popravi tako da tega ne počneš.
Textbox je namenjen prikazu podatkov in ne hranjenju velike količine texta.

Stvar popravi tako, da NE nalagaš komplet vsega ampak le nek smiselen delež.
Zbogom in hvala za vse ribe

japol ::

Baza vsebuje " ime; uporaba; datum " in to je to, sedaj moram to odpreti, ne morem nič izpustiti. Malo bolje je da sem uporabil richtextbox.

Yacked2 ::

japol je izjavil:

Baza vsebuje " ime; uporaba; datum " in to je to, sedaj moram to odpreti, ne morem nič izpustiti. Malo bolje je da sem uporabil richtextbox.


Odpri po delih :) najprej naloži prvih 20 vrstic, uporabnik naj se pa z gumbom premika gor/dol
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

win64 ::

Kaj je smisel tega polja?
- Samo za branje -> uporabi kak data grid kontrolo
- Iz podatkov se izdela excel/csv tabela -> sprogramiraj shranjevanje v CSV in odpri dokument v excelu
- Se to kopira nekam drugam -> sprogramiraj odlaganje na odložišče

Če tvoj problem ne paše v nobeno kategorijo je najlažje da shraniš podatke v datoteko in jo odpreš z notepadom ali wordpadom, ki ima te reči malo bolj poštimane.

30000 vrstic pa se mi ne zdi nek problem.
Najbrž imaš problem kje drugje. Uporabljaš kakšno ActiveX/COM kontrolo? Se ti to dogaja tudi ko zaženeš aplikacijo samostojno, brez razhroščevalnika?

Zgodovina sprememb…

  • spremenil: win64 ()

mm&r ::

V kolikor ti to javi v Debugger-ju kot praviš pomaga tale nastavitev.

japol ::

Poskusil sem z string binderjem, backgroud workerjem,... Problem je, ker imam for zanko (da prebere vsako vrsto) in v njej if (če vrstica vsebuje nek string), da potem to vrstico prestavi. In samo ta for in if stavka, samo da prebere vse vrstice v .txt, traja in to okoli 1000 vrstic v 1 minuti (to v začetku, po nekaj tisočih, traja še dlje). Nova datoteka pa ima 50.000+ vrstic.

black ice ::

Razloži kaj hočeš narediti. Zelo verjetno obstaja boljši/hitrejši postopek.

Excalibrus ::

Preberi celi fajl v string, mislim da ima rtxb funkcijo tudi uvoza celotnega fajla, ne samo vrstico po vrstico. Glej pa tudi omejitve na arhitekturo, 32 smz da ima 2Gib na komponento v .net.

urbecar ::

Ali ne gre podatke prefiltrirati že na nivoju SQLa?

japol ::

Če berem iz ricthextboxa ali pa dam tekst v string[] in potem berem iz njega, je časovno skoraj enak čas branja. Problem je v for zanki in if stavku. For zanko imam da gre čez vse vrstice v string[], if pa da najde ustrezno vrstico in jo prestavi. In isto traja ali jo prestavi v novi richtextbox ali pa v List.
Je pa datoteka v .txt drugače ne gre.

Excalibrus ::

Ali greš z navadnim forom v eni niti skos? Probi Parrallel.For

http://cc.davelozinski.com/c-sharp/the-...

Zgodovina sprememb…

win64 ::

japol je izjavil:

Če berem iz ricthextboxa ali pa dam tekst v string[] in potem berem iz njega, je časovno skoraj enak čas branja. Problem je v for zanki in if stavku. For zanko imam da gre čez vse vrstice v string[], if pa da najde ustrezno vrstico in jo prestavi. In isto traja ali jo prestavi v novi richtextbox ali pa v List.
Je pa datoteka v .txt drugače ne gre.

Pokaži vsaj nekaj kode, pa ti bomo lahko vsaj nekako pomagali optimizirat, to ugibanje nima velikega smisla. Ker for in if ne pomeni praktično nič in ti lahko postrežemo samo s splošnimi navodili za optimizacijo.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Resne težave z razumevanjem osnov programiranja (strani: 1 2 )

Oddelek: Programiranje
8016624 (13136) RatedR
»

VB.streamwriter

Oddelek: Programiranje
12997 (830) P=LN
»

C# StreamReader pomoč

Oddelek: Programiranje
101522 (1370) subby
»

Visual basic noob question

Oddelek: Programiranje
111564 (1319) DonMatejo
»

problem v C#

Oddelek: Programiranje
211969 (1684) dvojka

Več podobnih tem