Jag hittade precis ett riktigt svårupptäckt fel som gjorde att minnet på webservern tog slut. Det var ett fel som uppstod ibland så det gick inte riktigt att återskapa felet och det var som att leta efter en nål i en höstack. Äntligen hittade jag det :) Känns smartare att kolla innehållet på Total innan loopen, då behöver man inte starta ifall talet är för stort. vad är det egentligen som du vill loopa ut? kanske onödigt att slänga ett exception , använd "Exit For" istället Det låter vettigt! För varför skulle man vilja loopa tex 10000 en sedan kasta upp ett fel. Vad tror du om att kasta ett fel gällande loopar rent generellt om "Total" är större den borde? Det som inträffade i den loop:en som jag hittade felet i var att man lade till rader i ett dataset vid varje iteration. Men min avsikt med mitt inlägg var inte att se på denna specifika situation utan mer se på det ur ett generellt perspektiv. Dvs hur hanterar man detta med loop:ar på ett bra sätt rent generellt och när bör man tex lägga in en felhantering? Jag tänkte också att en exit for kanske vore bra men sen vid närmare eftertanke så är det kanske inte så bra eftersom det kan leda till att efterföljande kod smäller eller inte fungerar korrekt. Varför göra kollen i loopen. Är det så att Total ändras? Jag håller helt med! Johan kom med detta förslag också men hur ofta tycker du man bör göra en sådan koll när man kodar? kanske ska ha loopen inom "if total > 1000" satsen i stället för exception kastet :) En mer intressantare frågeställning, är väll att fråga sig vad stort är. En loop till 100 000 behöver inte vara stor om det inte sker mkt i den eller om den inte använder mycket minne. En loop till 10 kan vara värre om den slukar mycket minne eller gör något tungt.Något bra sätt att undvika stora loop:ar?
Men hur gör man för att undvika att loopar blir för stora på ett bra sätt?
Om man tex har en loop som ser ut så här:
For X = 0 To Total
...
Next
Så här skulle man kunna göra för att underlätta felsökning och undvika stora loopar:
For X = 0 To Total
...
If X > 10000 Then
Throw New Exception("Loop exception....")
End if
Next
Skulle ni gjort så som ovan eller skulle ni försökt göra det på ett annat sätt? Sen undrar jag i vilka fall man bör lägga in felhantering i större loopar? Själv har jag aldrig sett någon felhantering på detta sätt i loopar men det kanske inte är så dumt? Det enda jag sett några gånger under de år jag jobbat som programmerare är tex en if-sats som kontrollerar räknaren och därefter gör en exit for eller liknande för att undvika evighetsloppar eller större loopar.Sv: Något bra sätt att undvika stora loppar?
/JohanSv: Något bra sätt att undvika stora loppar?
Om du behöver så gigantiska loopar måste felet ligga annanstans. Om du nu inte sparar något vid varje iteration i loopen borde minnet inte ta slut på servern, så vad gör du egentligen i loopen?Sv: Något bra sätt att undvika stora loppar?
Sv:Något bra sätt att undvika stora loppar?
Sv:Något bra sätt att undvika stora loppar?
Sv:Något bra sätt att undvika stora loppar?
Sv: Något bra sätt att undvika stora loop:ar?
If Total > 10000 Then
Throw New Exception("No Way! That would iterat to many times, Dude!")
End if
For X = 0 To Total
...
Next
Eller:
If Total > 10000 Then
Total = 10000
End if
For X = 0 To Total
...
Next
Edit:
Samma lösning som Johan Djupmarker föreslog.
Sv:Något bra sätt att undvika stora loop:ar?
Sv:Något bra sätt att undvika stora loop:ar?
Men problemet att de blir för stort dataset , vad gör du med det sedan du uppdaterat det? kanske är det där ditt fel ligger. Är det så att du uppdaterara datasettet och sedan uppdaterar databasen med ny informtion som du lagt till i ditt dataset ? Sv: Något bra sätt att undvika stora loop:ar?