-
ACHTUNG - NEUES BLOG
Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
|
Alles über Threading in C#
27.06.07 - .NET, Grundlagen Beitrag von Norbert Eder| | Gerade das Thema Threading wird immer wieder in Foren angesprochen. Zahlreiche Fragen finden sich dazu. Wer sich in das Thema einlesen möchte, oder ein kleines Online-Nachschlagewerk benötigt, dem sei folgender Link ans Herz gelegt:
Threading in C#
Da sollte wohl so ziemlich alles zu finden sein.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
ASP.NET: Web Controls dynamisch laden
27.06.07 - .NET, ASP.NET Beitrag von Norbert Eder| | In vielen Situationen ist es notwendig, Web Controls dynamisch in einen Platzhalter (Placeholder-Control) zu laden. Dies kann sehr einfach bewerkstelligt werden:
this.ContentPlaceHolder.Controls.Clear();
this.ContentPlaceHolder.Controls.Add
(
LoadControl("modules/TestControl.ascx")
);
Das Beispiel geht davon aus, dass Web Controls im Verzeichnis modules gespeichert sind. Beim ContentPlaceHolder handelt es sich um ein ContentHolder-Control.
Natürlich kann dies auch entsprechend dynamischer gestaltet werden, da sich das zu ladende Control eventuell aus dem aufgerufenen Menüeintrag oder anderen Informationen definieren läßt.
| | | 1 Kommentar
- 1530 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Akronyme der Softwareentwicklung
26.06.07 - Kunterbunt Beitrag von Norbert Eder
Rude Q&A - Die etwas andere FAQ
26.06.07 - Entwicklung, Diskussionen, Qualitätsmgmt. Beitrag von Norbert Eder| | Frequently Asked Questions (FAQ) sind hinreichend bekannt. Was aber hat es mit dem Begriff Rude Q&A auf sich? Sehr einfach erklärt.
Zu jedem Projekt (Software oder nicht) können tonnenweise Fragen gestellt werden. Manche sind für alle von Interesse (typischer Fall für eine FAQ), manche sind unangenehm und würden am liebsten nicht beantwortet werden bzw. sind ohnehin nicht für die Allgemeinheit bestimmt (sinnvoll für eine Rude Q&A). Zusammenfassend: Eine Rude Q&A enthält alle unangenehmen Fragen zu einem Produkt, Unternehmen etc.
Was bringt das nun? Fragen sind da, um sich mit ihnen zu beschäftigen, und sie auch zu beantworten. Vor allem unangenehme Fragen werden oft nicht beantwortet, sei es aus eigener Angst heraus oder bedingt durch andere Gründe. Fakt ist jedoch, dass man auf alle Fragen eine Antwort parat haben sollte. Durch die Beschäftigung mit einer Frage wird also eine Vorbereitung betrieben, die sich im Falle des Falles auf jeden Fall auszahlt. Zudem empfiehlt es sich, die notierten Fragen von Zeit zu Zeit zu überarbeiten, denn schlechte Antworten sind oft schlimmer, als gar keine.
via Scott Berkun
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Sandcastle Help File Builder 1.5.0.0 verfügbar
26.06.07 - Tools, 3rd Party Tools Beitrag von Norbert Eder
DasBackup: Fehlermeldung bei der Synchronisation
25.06.07 - Tools, DasBackup Beitrag von Norbert Eder| | Beim Versuch eine Synchronisation anzustarten, erscheint der Fehler Cannot synchronize as there are no properties given. Dies betrifft die aktuelle Beta-Version 1.1.3. Hier liegt ein Bug vor, der leider in diese Version hineingerutscht wird. Dadurch kann die Synchronisation nicht getestet werden. Da ohnehin in den nächsten Tagen das Release erscheinen wird, gibt es dafür kein extra Update.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
C#: Der as-Operator
24.06.07 - .NET, Grundlagen, Base Framework Beitrag von Norbert Eder| | Einführung as-Operator
Der as-Operator ist ähnlich einer Cast-Operation. Im Gegensatz zu einem Cast liefert as jedoch keine Ausnahme (Exception), sondern gibt null zurück. Ein Beispiel:
object o = new MyDemoClass();
MyDemoClass mdc = o as MyDemoClass;
Die Cast-Variante würde wie folgt aussehen:
object o = new MyDemoClass();
MyDemoClass mdc = (MyDemoClass)o;
Ein Äquivalent zum as-Operator könnte so formuliert werden:
object o = new MyDemoClass();
MyDemoClass demoClass =
(o is MyDemoClass) ? (MyDemoClass)o : null;
Für benutzer-definierte Konvertierungen muss ein Cast verwendet werden, da dies durch den as-Operator nicht abgebildet wird (nur Referenzen und Boxing).
Performance
Bezüglich der Performance gibt es einen kleinen Unterschied, der sich allerdings erst bei einer hohen Anzahl an Durchläufen auswirkt. Ein Test mit 1 Milliarde Iterationen zeigte einen deutlichen Unterschied, sollte jedoch in der Praxis in dieser Form nicht allzu oft vorkommen. Hier die Testanwendung:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace AsTest
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
object o = new MyDemoClass();
sw.Start();
for (int i = 0; i < 1000000000; i++)
{
MyDemoClass mdc = o as MyDemoClass;
}
sw.Stop();
Console.WriteLine("as: " +
sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
for (int i = 0; i < 1000000000; i++)
{
MyDemoClass mdc = (MyDemoClass)o;
}
sw.Stop();
Console.WriteLine("cast: " +
sw.ElapsedMilliseconds);
Console.ReadKey();
}
}
public class MyDemoClass
{
}
}
Output
as: 6135
cast: 5583
Fazit
In vielen Fällen wäre der as-Operator einem Cast vorzuziehen, da hier einer eventuellen Exception vorgebeugt werden kann (im Falle eines Casts müsste davor via is-Operator überprüft werden, ob es sich um den gewünschten Typ handelt). Auf jeden Fall muss das Objekt anschließend auf null überprüft werden.
| | | 1 Kommentar
- 756 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Visual Studio 2005: Refactoring-Performance verbessern
24.06.07 - .NET, Visual Studio Beitrag von Norbert Eder| | Mit zunehmender Projektgröße wird auch das integrierte Refactoring ständig langsamer, bis es schließlich überhaupt nicht mehr verwendbar ist. Äußerst schlimm ist dies bei Web Projekten. Hintergrund ist der, dass so gut wie jeglicher Content für das Refactoring herangezogen wird. Eine Möglichkeit, einzelne Projekte auszuwählen oder bestimmte Teile der Solution nicht mit einzubeziehen ist ebenfalls nicht vorhanden. Dennoch gibt es eine kleine Variante, welche das Refactoring deutlich beschleunigt. Wie in vielen Fällen ist die Lösung über die Registry möglich:
1. Alle offenen Visual Studio 2005 Instanzen schließen
2. regedit starten
3. HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\
CSharp\Options\Editor
4. Neuer Eintrag: "Neuer DWORD-Wert"
5. Dem Eintrag den Namen OpenAllVenusFilesOnRefactor verpassen und den Wert auf 0 belassen
Nach einem Neustart sollte nun das Refactoring deutlich schneller laufen, ASP.NET Pages, Inline .asmx und .asax Code werden nicht mehr berücksichtigt.
Wer die Startzeit von Visual Studio 2005 verbessern möchte, sei auf den Eintrag Visual Studio 2005 schneller starten verwiesen.
Und noch ein Hinweis: Refactoring gibt es auch für Visual Basic 2005. Hierfür einfach Refactor! verwenden.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Was hat ein Formel1 Auto mit We are the champions von Queen zu tun?
23.06.07 - Kunterbunt Beitrag von Norbert Eder
Visual Studio 2005: Region-Blöcke per Tastatur auf- und zuklappen
23.06.07 - .NET, Visual Studio Beitrag von Norbert Eder| | Regions sind eine sehr nette Sache, möchte man Methoden, Eigenschaften, Attribute oder andere zusammengehörigen Teile einer Datei in Bereiche unterteilen. Wer nun aber möglichst wenig zur Maus greifen möchte, stellt sich sehr schnell die Frage, wie denn Regions-Blöcke per Tastatur auf- bzw. zugeklappt werden können:
STRG+M STRG+M
Und schon wieder ein Griff weniger zur Maus. Dass es doch tatsächlich immer wieder Tastenkombinationen gibt, die man ständig vergisst ...
| | | 1 Kommentar
- 437 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL | Zurück Weiter
|
|
|
|
|
|
|