-
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.
|
Die unterschiedlichen IDbParameter-Implementierungen
04.07.07 - .NET, Allerlei Beitrag von Norbert Eder| | Was ich einfach einmal loswerden muss: Alles redet immer von Standard hin und Standard her. Und genau bei den kleinen und einfachen Dingen funktioniert das schon nicht. Warum müssen manche Hersteller unbedingt ihren eigenen Willen durchsetzen?
Beim einen DbProvider ist der "Parameter Char" ein @, dann wieder mal ein ? usw. Sogar innerhalb der Versionen wird hier geändert (siehe MySql). Sowas muss ja wirklich nicht sein.
Unter solchen Voraussetzungen braucht erst gar niemand über die Einhaltung von Standards sprechen ...
| | | 1 Kommentar
- 580 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
EXIF Informationen mit C# und Boardmitteln auslesen
03.07.07 - .NET, Grundlagen, Base Framework Beitrag von Norbert Eder| | Neulich musste ich aus JPEG-Dateien EXIF-Daten auslesen. Hierzu gibt es unterschiedliche Möglichkeit. So kann man sich auf externe Bibliotheken verlassen, welche diese Funktionalität anbieten, oder es wird mit Hilfe der .NET 2.0+ Boardmittel umgesetzt. Ich habe mich für die zweite Variante entschieden, die zwar einen entscheidenden Nachteil mit sich bringt, der in meinem Fall jedoch nicht schlagend wurde: Performance.
So musste ich nur das Erstellungsdatum des Bildes auslesen (hier konnte ich nicht das Dateidatum heranziehen, da das Bild eventuell nachbearbeitet wurde). Das kann mit folgendem Code realisiert werden:
public class ExifReader
{
public string ReadExifDate(Image image)
{
PropertyItem[] items = image.PropertyItems;
foreach (PropertyItem pi in items)
{
if (pi.Id == 306)
{
string val =
System.Text.Encoding.Default.GetString
(pi.Value);
return val;
}
}
return "n/a";
}
}
Die Eigenschaft PropertyItem.Id repräsentiert grundlegend einen HEX-Wert, welcher angibt, welche Informationen sich im PropertyItem befinden. Dadurch könnte dieses Beispiel wesentlich erweitert werden. Sämtliche IDs sind unter dem angegebenen Link ersichtlich.
Der angegebene Nachteil besteht nun darin, dass für diese Variante, jedes Image (beispielsweise über Image.FromFile) geladen werden muss. Dies kostet jede Menge Performance. Deshalb sollte bei der Abarbeitung von großen und vor allem vielen Bildern diese Variante nicht herangezogen werden.
EXIF-Bibliotheken sollten durchaus einfach zu finden sein. Hier dennoch eine mögliche Library, die jedoch nicht auf Geschwindigkeit hin von mir getestet wurde:
EXIFextractor
| | | 2 Kommentare
- 9132 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
DasBackup 1.1.4 Final verfügbar
02.07.07 - Tools, DasBackup Beitrag von Norbert Eder
Artikel: Das Ziel ist die Konfiguration
29.06.07 - Blog-Intern Beitrag von Norbert Eder| | Ein klein wenig Werbung muss manchmal sein: In der Ausgabe 04/07 der visual studio one ist wieder ein Artikel von mir zu finden. Diesmal beschäftige ich mich mit dem Thema Configuration Management. Neben einer Einführung in die Grundlagen, werden Tools aufgezählt, die bei der Umsetzung helfen, als auch konkrete Beispiele geliefert.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Weitere Tunings für Visual Studio 2005
28.06.07 - .NET, Visual Studio Beitrag von Norbert Eder| | Im Beitrag Visual Studio 2005: Refactoring-Performance verbessern habe ich bereits einige Möglichkeiten genannt, Visual Studio 2005 performancemäßig zu verbessern. Hier nun weitere Optionen, die ein schnelleres Arbeiten ermöglichen:
Animationen deaktivieren: Animiertes kann unter Environment -- General -- Animate environment tools abgeschalten werden.
Startverhalten verändern: Unter Visual Studio 2005 schneller starten habe ich bereits gezeigt, wie der Splash-Screen deaktiviert werden kann. Eine weitere Möglichkeit die Performance zu verbessern besteht darin, die Start-Seite zu deaktivieren und Content-Download nicht durchführen zu lassen. Die entsprechenden Einstellungen finden sich unter Environment -- Startup. At Startup einfach auf 'Show empty environment' stellen und 'Download content every' deaktivieren.
Navigation-Bar ausblenden: Die Navigation-Bar zeigt alle in der gerade offenen Sourcecode-Datei enthaltenen Klassen und die dazugehörigen Methoden an. Wer Tools á la ReSharper verwendet, benötigt sie daher nicht und kann sie getrost ausblenden. Wieder ein wenig Performance-Gewinn. Zu finden unter Environment -- Text Editor -- All Languages -> Navigation Bar.
Toolbox und Eigenschaften-Fenster schließen: Wenn nicht benötigt und vor allem bei Formularen mit vielen Steuerelementen empfiehlt es sich, sowohl die Toolbox als auch das Eigenschaften-Fenster zu schließen. Durch das Verstecken werden die Fenster befüllt, daher komplett schließen und bei Bedarf wieder öffnen. Auch so läßt sich ein Performance-Gewinn herbeiführen.
Server-Explorer und Class-View: Wenn nicht benötigt, empfiehlt es sich auch, diese beiden Boxen zu schließen.
Es empfiehlt sich also generell alles zu schließen, das nicht benötigt wird.
| | | 2 Kommentare
- 1271 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
ISO Dateien mit Microsoft Tools mounten
28.06.07 - Kunterbunt Beitrag von Norbert Eder
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
- 1529 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 | Zurück Weiter
|
|
|
|
|
|
|