2009-05-13 12 views
1

Ich habe an einer .NET-Anwendung gearbeitet und einen Speicherfehler festgestellt (ich bin ein Java-Entwickler, der andere Dinge tun kann), ich habe über die Leistung nachgedacht. Was ich gepostet habe, war nicht das Speicherproblem. Das Gedächtnisproblem hat mich gerade zum Nachdenken gebracht.Best Practice für die Datenpopulation anzeigen?

Ich habe einen Trend in meiner ASP.NET-Anwendung wiederholt, die ich in unzähligen J2EE-Anwendungen verwendet habe: Verwenden von Business Entities zum Auffüllen von Dropdown-Listen. Je mehr ich darüber nachdenke, desto mehr mag ich es nicht. Zum Beispiel haben wir in der App, an der ich arbeite, eine Dropdown-Liste mit aktuellen Projekten. Ein Projekt ist ein Graph von Objekten. Um die Liste zu erstellen, ziehen wir jedoch alle Projekte zurück, erstellen das Diagramm und verwenden nur die ID und den Anzeigenamen. Dies scheint eine schreckliche Verschwendung zu sein. Um fair zu sein, ist die Dal-Schicht vollständig von Hand geschrieben. Der Hauptarchitekt würde kein ORM wie NHibernate erlauben.

Ich merke, dass alle diese Objekte in GEN0 sind und schnell Müll gesammelt. Was mich beunruhigt, ist, dass ich den GC besteuere. Immer 5% der CPU, die benötigt wird, um den GC zu verarbeiten, sind 5% der CPU, die ich sonst nicht verwenden kann. Diese Seite ist eine der wenigen, die ich wirklich respektiere. Was denkst du alle? Ist es schlecht, das Entity-Modell dafür zu verwenden? Soll ich eine Menge von IdValue-Objekten erstellen, die nur den Anzeigewert und die ID enthalten? Würde eine solche View-Objekt-Ebene erstellt (ich nehme nicht an, dass dies in der Business-Schicht passieren wird), einfach redundanten Code erstellen?

Danke, JPD

Antwort

1

Ich habe in den letzten paar Jahren an kommerziellen .NET-Anwendungen gearbeitet und muss noch auf ein Leistungsproblem stoßen, das gelöst wurde, indem ich versuchte, dem Garbage Collector effizienter zu helfen.

Das Sammeln von Metriken auf der anderen Seite war unglaublich hilfreich, um die Leistung, Speicherauslastung usw. zu verbessern.

1

nicht über die Besteuerung der GC Sorgen Sie, wird es stimmen sich auf Ihre Anwendung optimale Leistung zu geben. Ja, es ist am besten, Ihren Speicherbedarf zu reduzieren, aber ich denke nicht, dass es ein so ernsthaftes Problem ist, wie Sie sich vorstellen.

Eine gute DAL, mit der Sie nur die Daten zurückgeben können, die Sie benötigen, erhöht die Leistung Ihrer Anwendung und verringert auch den von Ihrer Anwendung benötigten Speicher. Aber ob Sie "zu viel" Speicher verwenden oder nicht, ich stelle mir vor, dass der GC in den meisten Fällen gut damit umgehen kann.

0

Ein alternativer Ansatz besteht darin, leichte Objekte für Ihre Zwecke zu erstellen. In diesem Fall hätten Sie ein leichtes Projektobjekt mit nur der ID und dem Anzeigenamen. Die Entscheidung muss dann getroffen werden, wenn die vorhandene DAL wiederverwendet oder eine Lightweight-Version der DAL erstellt wird.