-
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.
|
ASP.NET: Die PostBack-Falle
05.07.07 - .NET, ASP.NET Beitrag von Norbert Eder| | Irgendwann tappt jeder in die PostBack-Falle. So ist es auch mir passiert und daher dieser kurze Eintrag zu diesem Thema. Der Beginn macht eine kurze Einführung.
Was ist ein PostBack
Unter einem PostBack versteht man das senden einer Seite zum Server unter Verwendung des HTTP-Vers Post. Die Eingaben der gesendeten Seite werden vom Server verarbeitet und eine neue Seite generiert. Die gesamte Seite wird neu geladen.
Konkretes Problem
Beim Laden einer Seite (vor allem wenn Werte zugewiesen werden) sollte daher abgefragt werden, ob es sich tatsächlich um ein PostBack handelt. Hier ein konkreter Fall:
protected void Page_Load(object sender, EventArgs e)
{
FirstnameTextBox.Text = "Norbert";
LastnameTextBox.Text = "Eder";
}
In diesem Fall wird ein PostBack nicht abgefragt. Nun werden beim Laden der Seite die vorhandenen Textfelder mit Werten befüllt. Werden diese verändert und wieder an den Server übertragen, werden die Änderungen beim neu Erstellen der Seite wieder überschrieben. Die geänderten Werte scheinen also am Client nicht mehr auf. Grund hierfür ist, dass die Daten in der Methode LoadPostData (siehe Lebenszyklen etwas weiter unten) geladen und im anschließenden Load-Event überschrieben werden. Anders sieht dies aus, wenn die Wertezuweisung durch die Abfrage bezgl. eines PostBacks gesichert wird:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
FirstnameTextBox.Text = "Norbert";
LastnameTextBox.Text = "Eder";
}
}
In diesem Fall werden die Daten korrekt am Client angezeigt - nämlich die geänderten.
Zu guter Letzt möchte ich noch die unterschiedlichen Lebenszyklen einer Seite anführen, da sich diese durch ein PostBack verändern und darauf entsprechend Rücksicht genommen werden muss.
Lebenszyklen
Erster Aufruf
Die nachfolgenden Ereignisse bzw. Methoden werden beim initialen Aufruf einer Seite der Reihe nach abgearbeitet:
1. Init
2. Load
3. PreRender
4. SaveViewState
5. Render
6. Dispose
7. Unload
Bei einem PostBack
Bei einem PostBack erweitert sich der Lebenszyklus einer Seite geringfügig. Hier nun die neue Reihenfolge:
1. Init
2. LoadViewState
3. LoadPostData
4. Load
5. RaisePostDataChangedEvent
6. RaisePostBackEvent
7. PreRender
8. SaveViewState
9. Render
10. Dispose
11. UnLoad
Fazit
Es gilt sehr gut zu überlegen, in welchen Events welche Funktionalität ausgeführt werden soll. Hierfür, solange man sich noch nicht daran gewöhnt hat, regelmäßig einen Blick auf den Lebenszyklus werfen.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
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
- 583 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
- 9300 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
- 1275 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
- 1535 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Akronyme der Softwareentwicklung
26.06.07 - Kunterbunt Beitrag von Norbert Eder Zurück Weiter
|
|
|
|
|
|
|