Το Visual Studio αργεί σε κοινόχρηστο φάκελο VPN: γιατί η αποθήκευση γίνεται ταξίδια μετ' επιστροφής
Η επεξεργασία μέσω κοινόχρηστου φακέλου μετατρέπει την αποθήκευση, τα μενού και την παρακολούθηση αλλαγών σε ταξίδια μετ' επιστροφής. Μετακινήστε το αντίγραφο εργασίας τοπικά και μεταφέρετε το ιστορικό ως ένα αντικείμενο αντί να το διατρέχετε.
Μια λύση που ανοίγει σε ένα δευτερόλεπτο από τοπικό δίσκο χρειάζεται τριάντα δευτερόλεπτα για να ανοίξει από κοινόχρηστο φάκελο που προσεγγίζεται μέσω σήραγγας. Η σήραγγα σπάνια είναι η αιτία από μόνη της. Αυτό που αλλάζει είναι ότι λειτουργίες που ήταν τοπικές κλήσεις γίνονται σύγχρονα ταξίδια μετ' επιστροφής, και ο επεξεργαστής εκτελεί αρκετές από αυτές πριν εμφανιστεί το παράθυρο. Ο παρακάτω μηχανισμός εξηγεί γιατί καθεμία είναι δαπανηρή και ποιες μπορείτε να αφαιρέσετε.
Τι κάνει ο επεξεργαστής όσο ένα αρχείο είναι ανοιχτό
Ένας επεξεργαστής με παρακολούθηση αλλαγών κρατά συνδρομή σε κάθε αρχείο που έχει ανοιχτό. Ένας τοπικός τόμος εξυπηρετεί αυτή τη συνδρομή από το σύστημα αρχείων χωρίς δίκτυο. Μέσω κοινόχρηστου φακέλου η ίδια λειτουργία μπορεί να εκφυλιστεί σε επαναλαμβανόμενες αναγνώσεις μεταδεδομένων, γιατί το μοντέλο ειδοποιήσεων δεν συμπεριφέρεται το ίδιο μέσω SMB. Η απενεργοποίηση της παρακολούθησης αλλαγών είναι ένα δίκαιο πρώτο πείραμα, αφού αφαιρεί μια ολόκληρη κατηγορία αιτημάτων χωρίς να αγγίξει τη σήραγγα.
Το σύστημα έργου προσθέτει δική του κίνηση. Η φόρτωση μιας λύσης απαριθμεί καταλόγους, διαβάζει αρχεία έργου και μπορεί να ανιχνεύσει SDK ή πακέτα, και κάθε ανίχνευση είναι ταξίδι μετ' επιστροφής όταν η διαδρομή είναι απομακρυσμένη. Μια λύση με πολλά έργα πολλαπλασιάζει αυτόν τον αριθμό, γι' αυτό ο χρόνος ανοίγματος αυξάνεται ταχύτερα απ' ό,τι θα υποδείκνυαν τα μεγέθη των αρχείων.
Αναζητήσεις κελύφους που λήγουν πριν εμφανιστεί το μενού
Τα Windows προσθέτουν μια δεύτερη πηγή καθυστερήσεων που δεν έχει καμία σχέση με το IDE. Ο Εξερευνητής και οι επεκτάσεις κελύφους του επιλύουν ξανά εκτυπωτές, αντιστοιχισμένους δίσκους και συντομεύσεις που χρησιμοποιήθηκαν πριν, κάθε φορά που ανοίγει ένα μενού περιβάλλοντος. Όταν αυτοί οι στόχοι βρίσκονται σε δίκτυο που η σήραγγα δεν φτάνει, κάθε επίλυση μπλοκάρει μέχρι να λήξει ένα χρονικό όριο, και μόνο τότε ζωγραφίζεται το μενού. Γι' αυτό ένα δεξί κλικ μπορεί να κολλήσει για δευτερόλεπτα ενώ το ίδιο το αρχείο ανοίγει κανονικά.
Αφαιρέστε τις νεκρές αντιστοιχίσεις και τις ουρές εκτύπωσης, ή κρατήστε μόνο όσες υπάρχουν στο δίκτυο στο οποίο βρίσκεστε πραγματικά. Η ίδια λογική καλύπτει οτιδήποτε επιλύει μια διαδρομή στο παρασκήνιο, συμπεριλαμβανομένων λιστών πρόσφατων αρχείων και καρφιτσωμένων φακέλων.
net use
Get-Printer | Select-Object Name, PortName
Measure-Command { Get-ChildItem \files\proj | Out-Null }
Γιατί κερδίζει το τοπικό αντίγραφο εργασίας
Η εργασία απευθείας στον κοινόχρηστο φάκελο είναι η χειρότερη ρύθμιση για κύκλο επεξεργασίας, μεταγλώττισης και δοκιμής, αφού ο επεξεργαστής, ο μεταγλωττιστής και ο πελάτης ελέγχου εκδόσεων διαβάζουν καθένας ξεχωριστά αυτά τα απομακρυσμένα αρχεία. Καθένας πληρώνει το δικό του ταξίδι μετ' επιστροφής, και μια μεταγλώττιση πληρώνει μία φορά ανά αρχείο. Ένα τοπικό αντίγραφο με push μέσω του αποθετηρίου αντικαθιστά μια πλημμύρα μικρών διασχίσεων με μία σκόπιμη. Ο σύνδεσμος δεν βελτιώθηκε· ο αριθμός των διασχίσεων κατέρρευσε.
Αυτή είναι μια δομική αλλαγή και όχι άσκηση συντονισμού, και γι' αυτό ακριβώς λειτουργεί όταν οι ρυθμίσεις της σήραγγας δεν λειτουργούν. Κάνει επίσης προφανή τον τρόπο αποτυχίας: αν η μεταγλώττιση παραμένει αργή με τοπικό αντίγραφο, ο κοινόχρηστος φάκελος δεν ήταν ποτέ το πρόβλημα.
Μεταφέρετε το ιστορικό ως ένα αντικείμενο
Όταν το ίδιο το αποθετήριο πρέπει να διασχίσει τη σήραγγα, στείλτε το ιστορικό σε ένα αντικείμενο αντί να το διατρέχετε. Ένα bundle είναι ένα αρχείο και επομένως μία μεταφορά, ενώ ένα checkout που διατρέχει χιλιάδες χαλαρά αντικείμενα κοστίζει χιλιάδες διασχίσεις. Το Mercurial και το Git υποστηρίζουν και τα δύο αυτή τη μορφή.
hg bundle --base 9f2c1a7e outgoing.hg
hg unbundle outgoing.hg
git bundle create repo.bundle main
git clone repo.bundle repo
Η βασική αναθεώρηση είναι το κομμάτι που πρέπει να πετύχεις, γιατί αυτή αποφασίζει πόσο ιστορικό ταξιδεύει. Το να τα κάνεις όλα bundle λειτουργεί και σπαταλά τον σύνδεσμο, ενώ το bundle από την τελευταία κοινή αλλαγή μετακινεί μόνο ό,τι λείπει από την άλλη πλευρά.
Μετρήστε τρεις λειτουργίες πριν κατηγορήσετε το εύρος ζώνης
Μετρήστε τρία πράγματα χωριστά: ένα μικρό αρχείο ανοιγμένο, έναν κατάλογο καταγεγραμμένο, μια αποθήκευση ολοκληρωμένη. Αν και τα τρία είναι αργά αναλογικά με τον αριθμό αρχείων, το κόστος είναι τα ταξίδια μετ' επιστροφής. Αν ένα κολλάει ενώ τα άλλα είναι εντάξει, υποψιαστείτε χρονικό όριο προς μη προσβάσιμο πόρο και όχι εύρος ζώνης. Σημειώστε σε ποιο δίκτυο ήταν το μηχάνημα σε κάθε εκτέλεση, γιατί ένα φορητό που επανασυνδέεται σε άλλο προφίλ μπορεί να αλλάξει την απάντηση μεταξύ προσπαθειών.
Στη συνέχεια επαναλάβετε τα ίδια τρία με αντίγραφο του έργου τοπικά. Η διαφορά είναι η τιμή του κοινόχρηστου φακέλου, και αυτός είναι ο αριθμός που αναφέρετε όταν κάποιος προτείνει γρηγορότερο σύνδεσμο ως λύση.