Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

contextSwitchDeadlock error

Îåêßíçóå áðü ôï ìÝëïò tsomos. Τελευταία δημοσίευση από το μέλος Mitsaras στις 24-11-2008, 22:54. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-11-2008, 15:30 46439

    contextSwitchDeadlock error

    Για χαρα σε ολους,

    εχω μια εφαρμογη η οποία κάνει zip πολλά αρχεία με αποτέλεσμα να είναι για αρκετή ώρα απασχολημένη. Οταν κάνει αυτή τη διαδικασία, τότε βγαίνει μήνυμα contextSwitchDeadlock που απο οσο είδα βγαίνει επειδή απασχολείται πολύ ώρα η cpu ή κανω λάθος; Τεσπα, πήγα στο debug->exceptions->managed debugging assistant  και απενεργοποίησα το contextSwitchDeadlock ενώ αρχικά ήταν εργοποιημένο(είχε tick). Τώρα ξανατρέχω και δεν βγαίνει αυτό το error δουλεύει καλα αν και φυσικα περιμένω κάποια λεπτάκια μέχρι να τελειώσει.

    Ερώτηση: Ειμαι οκ έτσι ή είναι κακή ιδεά να το απενεργοποιήσω γιατί σε κάποια άλλη περίπτωση καλο ειναι να υπάρχει; Και επίσης,  μπορώ μέσα απο τον κώδικα να το απενεργοποιήσω όταν τρέχω αυτήν την διαδικασία και μόλις δω ότι τελείωσε να τα ξανα-ενεργοποιήσω(μιλάω σε επίπεδο κώδικα τώρα);

    thanks προκαταβολικα
  •  24-11-2008, 18:06 46441 σε απάντηση της 46439

    Απ: contextSwitchDeadlock error

    Μήπως χρησιμοποιείς COM interop?

    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  24-11-2008, 18:47 46443 σε απάντηση της 46441

    Απ: contextSwitchDeadlock error

    Δεν ξερω....παντως η εφαρμογη εχει μεσα διαφορα components και σίγουρα εχει componentes που ειναι com και όχι .net.....και αμα χρησιμοποιω ας πουμε; Τι σημαίνει αυτό;
    Τι να κανω;
  •  24-11-2008, 19:14 46444 σε απάντηση της 46443

    Απ: contextSwitchDeadlock error

    Δεν έχω συναντήσει προσωπικά το παραπάνω MDA, ωστόσο ξέρω ότι σχετίζεται με COM interop.

    Με μια σύντομη αναζήτηση στο google έπεσα εδώ:
    http://blogs.msdn.com/lifenglu/archive/2007/05/09/contextswitchdeadlock-mda-and-com.aspx

    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  24-11-2008, 19:26 46445 σε απάντηση της 46444

    Απ: contextSwitchDeadlock error

    Ψαξε-ψαξε εγω βρηκα αυτο:

    Control.CheckForIllegalCrossThreadCalls = False
    '''''''εδω ειναι η διαδικασια που αργει και προκαλει το προβλημα
    Control.CheckForIllegalCrossThreadCalls = True

    Δηλ, το απενεργοποιω, κανω δουλεια, το ενεργοποιω. Δουλευει οκ, χωρις προβλημα. Αν καποιος ξερει να μου πει αν αυτο που κανω(ΔΕΝ εχω ιδεα τι ειναι το Control.CheckForIllegalCrossThreadCalls) ειναι τιποτα φοβησιμο ή ειμαι οκ ετσι, δηλ, το κανω False, δουλευει, το κάνω true...

    thanks...
  •  24-11-2008, 22:00 46446 σε απάντηση της 46445

    Απ: contextSwitchDeadlock error

    Το "φοβήσιμο" είναι που λες ότι δεν ξέρεις τί κάνει ο κώδικας. Αν δεν ξέρεις τί κάνει ο κώδικας, οποιαδήποτε επέμβαση είναι επικίνδυνη. Ποιός έχει γράψει αυτό τον κώδικα? Κάποιος άλλος στην ομάδα σου, κάποιος ξένος, είναι generated? Τί κάνει ο κώδικας? Όχι απλά "συμπιέζει" αλλά ποιές βιβλιοθήκες καλεί? Πειράζει controls σε κάποια φόρμα? Υποψιάζομαι ότι τη συμπίεση των αρχείων την κάνεις χρησιμοποιώντας κάποιο COM component, αλλά και πάλι δεν μας λες τί κάνεις.
    Το CheckForIllegalCrossThreadCalls δεν έχει καμμία σχέση με αυτό που ψάχνεις πάντως, και καλό είναι να μην το πειράζεις και να το αφήνεις πάντα στο True. Αυτό που κάνει είναι να ελέγχει για μία απαγορευμένη ενέργεια, την προσπάθεια να πειράξεις ένα control από ένα thread διαφορετικό από αυτό που το δημιούργησε.

    Όσο για το ίδιο το ContextSwitchDeadlock αν πρόσεξες είναι ένα MDA και όχι ένα κανονικό exception. Τα MDAs σε ειδοποιούν ότι κάτι περίεργο συμβαίνει στον κώδικα σου και δεν εμφανίζονται σε κώδικα παραγωγής. Προφανώς κάτι περίεργο συμβαίνει και πρέπει να το διορθώσεις, όχι όμως πειράζοντας διάφορα settings μέχρι να εξαφανιστεί. Ίσως αυτό που συμβαίνει να μην είναι πρόβλημα για την εφαρμογή σου, ίσως και όχι. Το post που σου έδωσε ο Mitsaras έχει μία πολύ καλή περιγραφή του τί είναι και τί σημαίνει το ContextSwitchDeadlock.

    Καλό είναι μέχρι να καταλάβεις τί συμβαίνει να μην πειράξεις τον κώδικα σου, ειδικά αν δεν τον έχεις γράψει εσύ. Το να πειράζεις settings που δεν καταλαβαίνεις για να πετύχεις κάτι είναι συνταγή για καταστροφή. Ήδη πειράζοντας το CheckForIllegalCrossThreadCalls άφησες την εφαρμογή σου ανοιχτή για User Interface bugs.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-11-2008, 22:54 46447 σε απάντηση της 46446

    Απ: contextSwitchDeadlock error

    Πλήρης για άλλη μια φορά Παναγιώτη!

    Ωστόσο, μπορείς μήπως να επιβεβαιώσεις αν χρησιμοποιεις (και ποια) COM components, custom made ή retail, ώστε αν το πρόβλημα υφίσταται σε κάποιο retail COM, να δούμε αφ' ενός αν υπάρχει καταγεγραμμένη τέτοια περίπτωση από την εταιρεία που το έφτιαξε, κι αφ' ετέρου το αν μπορεί να αντικατασταθεί με native .net λύση (ειδικά για την συμπίεση, τα πράγματα είναι ενθαρρυντικά - αν όντως φταίει αυτό).

    Μην αφήνετε τα media να σας "ταΐζουν"!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems