Archiv verlassen und diese Seite im Standarddesign anzeigen : C# - Serializer vs Garbagecollection
Mr. Lolman
2021-06-21, 16:02:14
Hi,
der Einfachheithalber rief ich in meinem Projekctbisher bei Webrequests zum De-/Serialisieren von Daten immer new JavascriptSerializer().Serialize(Object) bzw. Deserialize auf und verlasse mich auf den Garbagecollector. Da das Projekt schön langsam anwächst und andauernd neue, zusätzliche Serialisierungen anstehen frag ich mich aber mittlerweile folgendes:
Machts Sinn, den Serializer einmal zu Instanziieren und fortan immer die Instanz aufrzurufen? Sind da Nebeneffekte zu erwarten (zB, dass mir da der Garbagecollector irgendwann dazwischen funkt), oder ist das mit C# eh komplet wurscht und ich mach mir schon wieder zuviele Gedanken? ;D
universaL
2021-06-21, 16:50:50
dependency injection? ;-) wenn es .net ist: https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection
ansonsten: benchmarke doch einmal kurz wie lange es dauert 10000 JavascriptSerializer anzulegen und überlege dann ob es dich wirklich kümmert, neue Instanzen anzulegen :-)
da.phreak
2021-06-22, 15:20:16
Also aus dem Bauch heraus tippe ich darauf, daß das Serialisieren selbst viel garbage erzeugt, nicht die Instanz vom Serializer.
Die Frage ist aber etwas schwierig zu beantworten, ohne Deine Rahmenbedingungen zu kennen. Wie sehr kommt es auf Performance an, und wieviele Instanzen werden es?
RattuS
2021-06-24, 01:17:57
Völlig unerheblich. (https://referencesource.microsoft.com/#system.web.extensions/Script/Serialization/JavaScriptSerializer.cs) Viel wichtiger finde ich den Hinweis von Microsoft (https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer). JsonSerializer wäre dann nämlich eh static.
For .NET Framework 4.7.2 and later versions, use the APIs in the System.Text.Json namespace for serialization and deserialization. For earlier versions of .NET Framework, use Newtonsoft.Json. This type was intended to provide serialization and deserialization functionality for AJAX-enabled applications.
][immy
2021-06-25, 09:17:35
Also der Garbage Collector arbeitet eigentlich relativ zuversichtlich bei so etwas. Sollte im Hintergrund sowieso auf purem .net basieren und daher nichts im Speicher verbleiben.
Mit einem static wäre ich da aber eher vorsichtig. Wenn da über unterschiedliche Threads Call auf die gleiche Instanz kommen, wäre ich eher vorsichtig bei Code den ich selbst nicht gut kenne. Sonst kommt da am ende noch irgendwas durcheinander, weil die Instanz nicht selbst Threaded.
Mr. Lolman
2021-06-26, 05:35:31
Na dann, mach ichs ja offenbar eh richtig. Ich häng aber noch auf .Net 4.5 fest und Newtonsoft will ich eigentlich vermeiden, da ich aus Prinzip so wenig externe Libraries wie möglich verwende.
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.