<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Αρχές προγραμματισμού</title><link>https://www.dotnetzone.gr:443/cs/forums/72/ShowForum.aspx</link><description>Αναρωτιέστε τι σημαίνει object; Class; Inheritance; Design pattern; Την απάντηση μπορείτε να την βρείτε εδώ!</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39463.aspx</link><pubDate>Tue, 22 Jan 2008 20:42:31 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39463</guid><dc:creator>Adamantios</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39463.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39463</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;P&gt;Ρίξε μια ματιά εδώ:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dotnetzone.gr/cs/blogs/mkelaiditis/pages/10156.aspx"&gt;http://www.dotnetzone.gr/cs/blogs/mkelaiditis/pages/10156.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Χρειάζεσαι την περίπτωση #3&lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Μετά από αρκετά πειράματα και διάβασμα, μπορώ να πω ότι έχω τα πρώτα πολύ ικανοποιητικά αποτελέσματα!!!! Ευχαριστώ! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39414.aspx</link><pubDate>Mon, 21 Jan 2008 09:53:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39414</guid><dc:creator>Adamantios</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39414.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39414</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Ο Μανώλης έχει δίκιο, κοίτα πρώτα όσα σου έγραψε αλλά και το MSDN. &lt;/div&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Έχω ήδη εκτυπώσει το κείμενο που μου έδωσε και έχω επίσης ρίξει και αρκετό διάβασμα το σκ. Νομίζω ότι από αύριο θα αρχίσω τα πρώτα μου test &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Το multithreading δεν είναι εύκολη υπόθεση και θέλει διάβασμα. Δεν μπορείς να πάρεις μία έτοιμη λύση και να περιμένεις να λυθεί το πρόβλημα σου έτσι απλά. Για παράδειγμα, θα πρέπει να δημιουργήσεις ένα ξεχωριστό VB6 αντικείμενο για κάθε thread, καθώς η VB6 δεν φτιάχτηκε για να επιτρέπει ταυτόχρονες κλήσεις στο ίδιο αντικείμενο.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Ναι, θα συμφωνήσω απόλυτα με αυτά που λες. Και ερχόμαστε σε αυτό που λες στην συνέχεια....&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Είσαι σίγουρος ότι τα πράγματα θα πάνε πιο γρήγορα? &lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Όχι, νομίζω ότι τελικά δεν θα κερδίσουμε τίποτα! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-6.gif" alt="Sad" /&gt;&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Γιατί καθυστερεί το function? Μήπως μπλοκάρει στη βάση? Κάνει περίεργους υπολογισμούς σε loop? Κάτι άλλο? (Πες μου τώρα ότι η εφαρμογή σου είναι και χρηματιστηριακή!). &lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Όχι, δεν είναι χρηματιστηριακή. &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt; Γιατί αργεί η εφαρμογή; Χμ.... Τα loops είναι σίγουρα ένας λόγος! Ένας άλλος λόγος είναι ότι αυτό το dll με την σειρά του καλεί ένα άλλο activeX exe το οποίο είναι και αυτό πολύ αργό (remote automation, rdo κτλ κτλ). Δυστυχώς όμως, δεν μπορώ να παρέμβω σε αυτά τα προγράμματα, αλλά ούτε και στην βάση. &lt;/P&gt;
&lt;P&gt;Διαμάντης&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39400.aspx</link><pubDate>Mon, 21 Jan 2008 07:01:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39400</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39400.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39400</wfw:commentRss><description>&lt;P&gt;Ο Μανώλης έχει δίκιο, κοίτα πρώτα όσα σου έγραψε αλλά και το MSDN. Υπάρχουν πολλά άρθρα για threading, αν και στην περίπτωση σου η χρήση των delegates φαίνεται θα μπορούσε να βοηθήσει αλλά θα πρέπει να έχεις υπόψη τα προβλήματα που υπάρχουν στη χρήση VB6 από Web Services. Το multithreading δεν είναι εύκολη υπόθεση και θέλει διάβασμα. Δεν μπορείς να πάρεις μία έτοιμη λύση και να περιμένεις να λυθεί το πρόβλημα σου έτσι απλά. Για παράδειγμα, θα πρέπει να δημιουργήσεις ένα ξεχωριστό VB6 αντικείμενο για κάθε thread, καθώς η VB6 δεν φτιάχτηκε για να επιτρέπει ταυτόχρονες κλήσεις στο ίδιο αντικείμενο.&lt;/P&gt;
&lt;P&gt;Είσαι σίγουρος ότι τα πράγματα θα πάνε πιο γρήγορα? Γιατί καθυστερεί το function? Μήπως μπλοκάρει στη βάση? Κάνει περίεργους υπολογισμούς σε loop? Κάτι άλλο? (Πες μου τώρα ότι η εφαρμογή σου είναι και χρηματιστηριακή!). Αν η εφαρμογή μπλοκάρει στη βάση, τα περισσότερα threads θα χειροτερέψουν την κατάσταση καθώς θα προκαλέσουν χειρότερο μπλοκάρισμα. Αν η εφαρμογή χρησιμοποιεί πολύ CPU μπορείς να επιταχύνεις τη διαδικασία αν δημιουργήσεις ένα thread ανά επεξεργαστή. Δεν έχει κανένα απολύτως νόημα να χρησιμοποιείς 10 thread όταν έχεις μόνο 1 επεξεργαστή. &lt;/P&gt;
&lt;P&gt;Μετά σκέψου και το άλλο. Ένα web service δεν καλείται από ένα και μόνο client. Το VB6 dll σου μπορεί να καλείται ήδη από 10 διαφορετικούς client. Όπως είναι τώρα τα πράγματα, για 10 clients το dll καλείται 10 φορές ταυτόχρονα. Αν φτιάξεις 10 threads, το dll θα εκτελείται 100 φορές ταυτόχρονα. Ακόμα και αν το dll δεν χρησιμοποιεί καθόλου τη βάση, είμαι σίγουρος ότι δεν έχεις 100 CPU στο μηχάνημα σου.&amp;nbsp;Για τον ίδιο αριθμό CPU θα έχεις αυξήσει την καθυστέρηση λόγω thread switching χωρίς αντίστοιχη βελτίωση στην ταχύτητα.&lt;/P&gt;
&lt;P&gt;Αν ο λόγος που καθυστερεί το function είναι κακός προγραμματισμός είτε σε επίπεδο VB6 ή στη βάση, θα καταφέρεις πολύ καλύτερα αποτελέσματα, πολύ ευκολότερα, διορθώνοντας τον προβληματικό κώδικα. Για παράδειγμα, μπορεί να έχεις ένα loop μέσα στο οποίο υπολογίζεται συνέχεια το ίδιο πράγμα. Αν βγάλεις αυτό το κομμάτι του υπολογισμού έξω από το loop θα πετύχεις σημαντική αύξηση ταχύτητας. Άλλος λόγος για σημαντική καθυστέρηση είναι η χρήση cursor στη βάση, ή η χρήση recordsets με client ή server&amp;nbsp;side cursors. Θα πετύχεις πολύ μεγαλύτερη αύξηση στην ταχύτητα αν χρησιμοποιήσεις disconnected recordsets και stored procedures. &lt;/P&gt;
&lt;P&gt;Πριν από καιρό χρειάστηκε να αντιμετωπίσω μία τέτοια κακογραμμένη εφαρμογή. Η εφαρμογή υπολόγιζε αποδόσεις χαρτοφυλακίων και ήθελε 4 ημέρες να επεξεργαστεί όλα τα δεδομένα. Ένας από τους λόγους ήταν η χρήση cursors και recordsets. Ο άλλος ήταν ότι ο υπολογισμός της τιμής κάθε τίτλου (π.χ. μετοχής, αμοιβαίου, ομολόγου) γίνονταν ανά πελάτη, τίτλο και ημερομηνία. Όμως, ο υπολογισμός ανά τίτλο έφερνε το ίδιο αποτέλεσμα για όλους τους πελάτες την ίδια ημερομηνία. Ουσιαστικά η τιμή του τίτλου υπολογιζόταν χωρίς λόγο μερικές χιλιάδες φορές.&lt;BR&gt;Αλλάζοντας τον τρόπο υπολογισμού των τίτλων και αντικαθιστώντας το 80% του κώδικα που χρησιμοποιούσε recordsets ο χρόνος υπολογισμού έπεσε στις 2-4 ώρες.&lt;/P&gt;</description></item><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39387.aspx</link><pubDate>Mon, 21 Jan 2008 00:53:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39387</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39387.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39387</wfw:commentRss><description>&lt;P&gt;Κοίταξες το άρθρο μου που σου πρότεινα; Απ' ό,τι περιγράφεις βρίσκει εφαρμογή στην περίπτωσή σου.&lt;/P&gt;</description></item><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39386.aspx</link><pubDate>Sun, 20 Jan 2008 23:42:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39386</guid><dc:creator>Adamantios</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39386.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39386</wfw:commentRss><description>&lt;P&gt;Καλησπερίζω και πάλι την παρέα του DotNetZone.&lt;/P&gt;
&lt;P&gt;Νομίζω ότι πρέπει να γίνω πιο σαφής για να καταλάβετε ακριβώς τι θέλουμε να κάνουμε.&lt;/P&gt;
&lt;P&gt;Όπως είχα γράψει και στο αρχικό μου μήνυμα, έχουμε γράψει ένα Web Service το οποίο καλεί ένα vb6 dll και αφού ανταλλάξει μαζί του πληροφορίες εξάγει κάποια αποτελέσματα. Για την ακρίβεια, στο vb6 dll σετάρουμε κάποιες μεταβλητές και αφού καλέσουμε μια function, αυτή σετάρει μια άλλη μεταβλητή (η οποία είναι ένα δισδιάστατο array). Να σημειώσω επίσης, ότι η function αυτή, ανάλογα με το πως θα σεταριστεί, κάνει από 0.3 έως 1 λεπτό να γυρίσει τα αποτελέσματα της.&lt;/P&gt;
&lt;P&gt;Τώρα, έχει παρουσιαστεί η ανάγκη να καλέσουμε αυτή την Function (μέχρι) 10 φορές. Σκεφτήκαμε λοιπόν, ότι αντί να την καλέσουμε 10 φορές σύγχρονα, να την καλέσουμε 10 φορές ασύγχρονα.&lt;/P&gt;
&lt;P&gt;Ψάχνω λοιπόν βιβλιογραφία και συμβουλές&amp;nbsp;για το παραπάνω πρόβλημα. Έχεις κανείς κάτι υπόψιν του για να ξεκινήσω; &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/P&gt;
&lt;P&gt;Διαμάντης&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39344.aspx</link><pubDate>Sat, 19 Jan 2008 08:03:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39344</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39344.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39344</wfw:commentRss><description>&lt;P&gt;Νομίζω ότι και η #2 κάνει, χωρίς polling. Από τη στιγμή που μιλάμε για Web Service δεν πρόκειται να επιστραφεί σε όποιον το καλεί τίποτε μέχρι να τελειώσει η ασύγχρονη κλήση. Άνετα μπορεί να γίνει η κλήση στην BeginInvoke, να κάνουμε ό,τι άλλο θέλουμε στο κυρίως thread και τέλος να καλέσουμε την EndInvoke. &lt;/P&gt;
&lt;P&gt;Προσοχή όμως. H χρήση COM Interop σε Web Service έχει διάφορα προβλήματα, όπως περιγράφεται και στο &lt;A href="http://support.microsoft.com/kb/325791/en-us"&gt;http://support.microsoft.com/kb/325791/en-us&lt;/A&gt;&amp;nbsp;. Τα πράγματα είναι πιο εύκολα όταν χρησιμοποιεί κανείς COM+ καθώς τότε βλέπει τα componets μέσω των Enterprise Services. &lt;/P&gt;</description></item><item><title>Απ: Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39323.aspx</link><pubDate>Fri, 18 Jan 2008 19:12:19 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39323</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39323.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39323</wfw:commentRss><description>&lt;P&gt;Ρίξε μια ματιά εδώ:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dotnetzone.gr/cs/blogs/mkelaiditis/pages/10156.aspx"&gt;http://www.dotnetzone.gr/cs/blogs/mkelaiditis/pages/10156.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Χρειάζεσαι την περίπτωση #3&lt;/P&gt;</description></item><item><title>Asynchronous calls</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/39322.aspx</link><pubDate>Fri, 18 Jan 2008 18:52:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:39322</guid><dc:creator>Adamantios</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/39322.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=39322</wfw:commentRss><description>Καλημερίζω την παρέα.&lt;br&gt;&lt;br&gt;Στην εργασία μου, έχουμε γράψει μια εφαρμογή (VB.NET, framework 2.0, MSSQL 2005), στην οποία, ένα Web Service καλεί ένα vb6 dll και αφού ανταλλάξει μαζί του πληροφορίες εξάγει κάποια αποτελέσματα. Θα θέλαμε όμως, αυτά τα calls στο vb6 dll να γίνονται ασύγχρονα.&lt;br&gt;&lt;br&gt;Θα ήθελα λοιπόν, να μου δώσετε μερικά links για το πώς θα ξεκινήσω. Θα σας παρακαλέσω όπως, τα links αυτά, εκτός από την απαραίτητη θεωρεία να έχουν και κάποιο κώδικα να δω.&lt;br&gt;&lt;br&gt;Ευχαριστώ,&lt;br&gt;Διαμάντης&lt;br&gt;&lt;br&gt;</description></item></channel></rss>