Ik heb een cache gemaakt van een hoop objecten vanwege de traagheid van het onderliggende systeem. Dit heb ik gedaan dmv een List<voorbeeld>, dit werkt goed.
Dit geeft wel een probleem, namelijk dat ik de objecten moet clonen voordat ik ze "doorgeef". Dit heb ik gedaan door het volgende te doen (zie code onderaan).
Dit gaat prima, maar kost wel wat tijd en aangezien soms wel tot 1000 objecten doorlopen moeten worden gaat het ineens om een paar seconden. De applicatie is een webapplicatie en ik heb liever niet dat gebruikers een paar seconden moeten wachten.
Nu kan ik ICloneable gebruiken maar ik ben er niet zeker van dat de List<int> ook gecloned wordt (deepcloning).
Heeft iemand een oplossing om het eea te versnellen?
Dit geeft wel een probleem, namelijk dat ik de objecten moet clonen voordat ik ze "doorgeef". Dit heb ik gedaan door het volgende te doen (zie code onderaan).
Dit gaat prima, maar kost wel wat tijd en aangezien soms wel tot 1000 objecten doorlopen moeten worden gaat het ineens om een paar seconden. De applicatie is een webapplicatie en ik heb liever niet dat gebruikers een paar seconden moeten wachten.
Nu kan ik ICloneable gebruiken maar ik ben er niet zeker van dat de List<int> ook gecloned wordt (deepcloning).
Heeft iemand een oplossing om het eea te versnellen?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| public static class GenericCopier<T> { public static T DeepCopy(object objectToCopy) { using (MemoryStream memoryStream = new MemoryStream()) { BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(memoryStream, objectToCopy); memoryStream.Seek(0, SeekOrigin.Begin); return (T) binaryFormatter.Deserialize(memoryStream); } } } public class voorbeeld : ISerializable { public int Id {get; internal set;} public List<int> Koppelingen{get; internal set;} public void GetObjectData(SerializationInfo info, StreamingContext context) { string serializeString = ""; serializeString += Framework.FastSerializer.Serialize(Id); serializeString += (char)255 + Framework.FastSerializer.Serialize(Koppelingen); info.AddValue("serializeString", serializeString, typeof(string)); } public voorbeeld (SerializationInfo info, StreamingContext context) { string serializeString = (string)info.GetValue("serializeString", typeof(string)); string[] values = serializeString.Split((char) 255); Id = (int?)Framework.FastSerializer.DeSerialize(values[0]); Koppelingen = new List<int>(); Koppelingen .AddRange((List<int>) Framework.FastSerializer.DeSerialize(values[1])); } } |