Project "SideWinder" |
Met behulp van SideWinder had Micha een klein testprogramma geschreven dat op vier manieren een string groter ging maken door er (1000 keer) een stukje aan vast te plakken.
Vanuit OptimizeIt kozen we voor Memory Profiling, en vervolgens werd het testprogramma gestart.
In de eerste poging werd er een character aan de string geplakt.
Dat kost meer dan 2000 string operaties (en meer dan 1MB aan geheugen); 1000 keer eerst het omzetten van de character naar een string, en daarna het plakken van deze string aan onze uiteindelijke string (operaties die allemaal een tijdelijke string opleveren).
Met behulp van OptimizeIt kunnen we niet alleen zien hoeveel operaties (en string objecten) er zijn geweest, maar ook in welke module en zelfs op welke source code regel dit plaatsvindt.
Hierdoor is snel in te zoomen op performance bottle-necks: zowel op geheugen als op CPU niveau!
Een hele verbetering kon al behaald worden door niet een character maar een string (van één character lang) erbij op te tellen: dan gaat de teller al van ruim 2000 naar "slechts" ruim 1000.
Daarna werd gebruik gemaakt van een speciale String class die gemaakt is om op deze manier opgebouwd te worden, en werd het geheugen gebruik teruggebracht tot 5K (maar het ging natuurlijk meer om het zien hoe OptimizeIt de vinger op de "zere plek" kon leggen).
Een trial-versie van OptimizeIt for .NET is te downloaden van de Borland website (en Micha kwam er ter plekke achter dat zijn trial er al op 14 maart mee ophield ;-)
SideWinder
En toen waren we eindelijk aangekomen bij de hoofdschotel: SideWinder.
Alvorens de SideWinder IDE nog een keer op te starten (hij was immers al gebruikt bij de OptimizeIt demo), liet Micha nog even een slide zien van de Borland Conference in Anaheim (18 t/m 22 mei 2002).
Toen werd als naam nog Galileo gebruikt voor de .NET Development Studio.
Als eerste resultaat van Galileo werkt Borland momenteel aan SideWinder: een native .NET IDE voor C# (met alles erop en eraan).
De SideWinder IDE doet een beetje denken aan een combinatie van de Delphi, Visual Studio, en JBuilder IDE en misschien nog wel meer.
De menu-structuur deed in ieder geval veel aan Delphi denken, terwijl de manier waarop de IDE elementen waren gerangschikt veel aan Visual Studio .NET deed denken (er is ook een "Classic" IDE layout, maar Micha liet die bewust even niet zien).
De Object Inspector lijkt op een nieuwe versie van die van Delphi, maar je kan ook voor een .NET Object Inspector kiezen als je wilt (die hebben we echter niet gezien).
Verder is er ook binnen SideWinder kennelijk geen concept van een .dfm bestand, maar worden alle properties en andere zaken (zoals positie en omvang van een control) direct in de C# code zelf geregeld: ieder control heeft zijn eigen paar regels code om de initialisatie uit te voeren.
Het aardige is dat SideWinder - zoals we gewend zijn - een echte 2-way tool is: wijzigingen in de C# code (zoals een nieuwe waarde voor de Text property) worden ook meteen zichtbaar in de form designer.
Met File | New kom je in een soort Object Repository, waar we voor C# een nieuwe application, een nieuwe console application, een nieuwe class lib en nog iets (ging te snel) konden maken.
Ook zagen we mogelijkheden voor ASP.NET (WebForms) en web services staan.
Een nieuwe application levert een WinForms toepassing op, waarbij je verschillende componenten kunt gebruiken (rechtsonder in de IDE te zien).
De gebruikelijke demo van een edit - button en listbox werd vertoond, inclusief een breakpoint in de code (hieronder zie je hoe je in de SideWinder IDE Debugger komt op een breakpoint):
Daarna werd de aandacht verschoven naar de toevoegingen die Borland aan C# ontwikkelaars kan bieden (waarom zouden we C# van Borland gebruiken?).
En één verzameling van die speciale componenten die in SideWinder zitten zijn de Borland Data Provider componenten.
Ik zag o.a. een bdpCommand, bdpCommandBuilder, bdpConnection en bdpDataAdapter (er zijn er vast meer).
Deze componenten maken het eenvoudig om te switchen van database, en om ook tijdens design-time "live" data te kunnen zien.
Micha gebruikte hiertoe een normaal DataGrid en een DataAdapter om via een dialoogscherm (daar heb ik helaas geen foto van) een verbinding te maken met een InterBase database (via de InterBase .NET Provider) en daar een query op uit te voeren.
Dit leverde drie extra componenten op: dataSet, bdpCommand en bdpConnection.
Door de dataSet aan het DataGrid te koppelen zagen we meteen data tijdens design-time:
Om de C# code-kloppers gerust te stellen vertelde Micha dat het ook in "pure" C# code kon (dus zonder de DataAdapter dialoog).
Merk overigens op dat de non-visuele componenten niet op het form zelf, maar onderaan terug te vinden zijn.
Dit zagen we ook al in de eerste screenshots van SideWinder op mijn website.
Als laatste demo van SideWinder liet Micha zien dat SideWinder al in staat is om de WSDL van web services te importeren en te gebruiken.
Hiervoor werd een in Delphi 7 Enterprise geschreven web services gebruikt (die een method had genaamd "BorlandMessage" met ook de huidige tijd).
De WSDL URL van deze web services werd vervolgens gebruikt in de SideWinder WSDL Importer om een C# import unit te genereren:
Vervolgens werd er een instantie van het interface gecreëerd, de methode BorlandMessage aangeroepen, en zagen we het resultaat inderdaad op het scherm.
Vanuit .NET dus een Delphi 7 Win32 web service aanroepen.
Als allerlaatste grapje liet Micha vervolgens de Delphi 7 Web Service als Web App Debugger stoppen op een breakpoint (op basis van een request van de SideWinder C# web service client).
Aan de tijd die met de Borland Message werd meegegeven zag Micha toen dat het tijd was om af te sluiten. SideWinder is duidelijk nog niet af, alhoewel het al erg indrukwekkend is om te zien wat er allemaal al mogelijk is (vooral de Borland Data Provider componenten zagen er erg goed uit).
Meer Informatie
Mocht iemand nog vragen, opmerkingen of suggesties hebben, dan hoor ik die het liefst via e-mail.
Zodra er meer te melden valt over SideWinder zal ik dat zeker op mijn websites vermelden, en OptimizeIt zal ik binnenkort al eens nader bekijken.
Wie tot slot meer wil zien betreffende de Delphi for .NET preview command-line compiler en de mogelijkheden daarvan, zou zeker een bezoek aan mijn Delphi en .NET Clinic kunnen overwegen.