Changeset 16594
- Timestamp:
- 02/07/19 17:50:02 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/HeuristicLab.Tests/HeuristicLab.Persistence.Attic/UseCases.cs
r16578 r16594 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Diagnostics; 24 25 using System.Drawing; 25 26 using System.IO; 27 using System.IO.Compression; 26 28 using System.Linq; 27 29 using System.Reflection; … … 35 37 using HeuristicLab.Persistence.Core; 36 38 using HeuristicLab.Persistence.Default.Xml; 39 using HeuristicLab.Persistence.Interfaces; 37 40 using HeuristicLab.Tests; 38 41 using Microsoft.VisualStudio.TestTools.UnitTesting; … … 151 154 } 152 155 } 156 157 [TestMethod] 158 [TestCategory("Persistence.Attic")] 159 [TestProperty("Time", "long")] 160 public void ProfileSamples() { 161 // CreateAllSamples(); 162 var path = SamplesUtils.SamplesDirectory; 163 foreach (var fileName in Directory.EnumerateFiles(path, "*.hl")) { 164 //ProfilePersistenceToMemory(fileName); 165 ProfilePersistenceToDisk(fileName); 166 } 167 } 168 169 private void ProfilePersistenceToMemory(string fileName) { 170 var REPS = 5; 171 var oldDeserStopwatch = new Stopwatch(); 172 var oldSerStopwatch = new Stopwatch(); 173 var newDeserStopwatch = new Stopwatch(); 174 var newSerStopwatch = new Stopwatch(); 175 long oldSize = 0, newSize = 0; 176 var config = ConfigurationService.Instance.GetConfiguration(new XmlFormat()); 177 int[] oldCollections = new int[3]; 178 int[] newCollections = new int[3]; 179 180 for (int i = 0; i < REPS; i++) { 181 var original = XmlParser.Deserialize(fileName); 182 object deserializedObject1 = null; 183 object deserializedObject2 = null; 184 byte[] buf; 185 System.GC.Collect(); 186 var collection0 = System.GC.CollectionCount(0); 187 var collection1 = System.GC.CollectionCount(1); 188 var collection2 = System.GC.CollectionCount(2); 189 using (var s = new MemoryStream()) { 190 191 oldSerStopwatch.Start(); 192 // serialize manually so that the stream won't be closed 193 var serializer = new Core.Serializer(original, config); 194 serializer.InterleaveTypeInformation = true; 195 using (StreamWriter writer = new StreamWriter(new GZipStream(s, CompressionMode.Compress))) { 196 XmlGenerator generator = new XmlGenerator(); 197 foreach (ISerializationToken token in serializer) { 198 writer.Write(generator.Format(token)); 199 } 200 writer.Flush(); 201 oldSize += s.Length; 202 } 203 204 oldSerStopwatch.Stop(); 205 buf = s.GetBuffer(); 206 } 207 using (var s = new MemoryStream(buf)) { 208 oldDeserStopwatch.Start(); 209 deserializedObject1 = XmlParser.Deserialize(s); 210 oldDeserStopwatch.Stop(); 211 } 212 213 System.GC.Collect(); 214 oldCollections[0] += System.GC.CollectionCount(0) - collection0; 215 oldCollections[1] += System.GC.CollectionCount(1) - collection1; 216 oldCollections[2] += System.GC.CollectionCount(2) - collection2; 217 218 collection0 = System.GC.CollectionCount(0); 219 collection1 = System.GC.CollectionCount(1); 220 collection2 = System.GC.CollectionCount(2); 221 222 // Protobuf only uses Deflate 223 using (var m = new MemoryStream()) { 224 // using (var s = new GZipStream(m, CompressionMode.Compress)) { // same as old persistence 225 using (var s = new DeflateStream(m, CompressionMode.Compress)) { // new format 226 newSerStopwatch.Start(); 227 (new ProtoBufSerializer()).Serialize(original, s, false); 228 s.Flush(); 229 newSerStopwatch.Stop(); 230 newSize += m.Length; 231 } 232 buf = m.GetBuffer(); 233 } 234 using (var m = new MemoryStream(buf)) { 235 // using (var s = new GZipStream(m, CompressionMode.Decompress)) { // same as old persistence 236 using (var s = new DeflateStream(m, CompressionMode.Decompress)) { // new format 237 newDeserStopwatch.Start(); 238 deserializedObject2 = (new ProtoBufSerializer()).Deserialize(s); 239 newDeserStopwatch.Stop(); 240 } 241 } 242 //Assert.AreEqual(deserializedObject1.GetObjectGraphObjects().Count(), deserializedObject2.GetObjectGraphObjects().Count()); 243 244 System.GC.Collect(); 245 newCollections[0] += System.GC.CollectionCount(0) - collection0; 246 newCollections[1] += System.GC.CollectionCount(1) - collection1; 247 newCollections[2] += System.GC.CollectionCount(2) - collection2; 248 } 249 250 Console.WriteLine($"{fileName} " + 251 $"{oldSize / (double)REPS} " + 252 $"{newSize / (double)REPS} " + 253 $"{oldSerStopwatch.ElapsedMilliseconds / (double)REPS} " + 254 $"{newSerStopwatch.ElapsedMilliseconds / (double)REPS} " + 255 $"{oldDeserStopwatch.ElapsedMilliseconds / (double)REPS} " + 256 $"{newDeserStopwatch.ElapsedMilliseconds / (double)REPS} " + 257 $"{oldCollections[0] / (double)REPS} " + 258 $"{newCollections[0] / (double)REPS} " + 259 $"{oldCollections[1] / (double)REPS} " + 260 $"{newCollections[1] / (double)REPS} " + 261 $"{oldCollections[2] / (double)REPS} " + 262 $"{newCollections[2] / (double)REPS} " + 263 $""); 264 } 265 266 private void ProfilePersistenceToDisk(string fileName) { 267 var REPS = 5; 268 var oldDeserStopwatch = new Stopwatch(); 269 var oldSerStopwatch = new Stopwatch(); 270 var newDeserStopwatch = new Stopwatch(); 271 var newSerStopwatch = new Stopwatch(); 272 long oldSize = 0, newSize = 0; 273 int[] oldCollections = new int[3]; 274 int[] newCollections = new int[3]; 275 276 for (int i = 0; i < REPS; i++) { 277 var original = XmlParser.Deserialize(fileName); 278 byte[] buf; 279 System.GC.Collect(); 280 var collection0 = System.GC.CollectionCount(0); 281 var collection1 = System.GC.CollectionCount(1); 282 var collection2 = System.GC.CollectionCount(2); 283 284 oldSerStopwatch.Start(); 285 XmlGenerator.Serialize(original, tempFile); 286 oldSerStopwatch.Stop(); 287 288 oldSize += new FileInfo(tempFile).Length; 289 oldDeserStopwatch.Start(); 290 var clone = XmlParser.Deserialize(tempFile); 291 oldDeserStopwatch.Stop(); 292 System.GC.Collect(); 293 oldCollections[0] += System.GC.CollectionCount(0) - collection0; 294 oldCollections[1] += System.GC.CollectionCount(1) - collection1; 295 oldCollections[2] += System.GC.CollectionCount(2) - collection2; 296 297 collection0 = System.GC.CollectionCount(0); 298 collection1 = System.GC.CollectionCount(1); 299 collection2 = System.GC.CollectionCount(2); 300 301 newSerStopwatch.Start(); 302 (new ProtoBufSerializer()).Serialize(original, tempFile); 303 newSerStopwatch.Stop(); 304 newSize += new FileInfo(tempFile).Length; 305 newDeserStopwatch.Start(); 306 var newClone = (new ProtoBufSerializer()).Deserialize(tempFile); 307 newDeserStopwatch.Stop(); 308 System.GC.Collect(); 309 newCollections[0] += System.GC.CollectionCount(0) - collection0; 310 newCollections[1] += System.GC.CollectionCount(1) - collection1; 311 newCollections[2] += System.GC.CollectionCount(2) - collection2; 312 } 313 Console.WriteLine($"{fileName} " + 314 $"{oldSize / (double)REPS} " + 315 $"{newSize / (double)REPS} " + 316 $"{oldSerStopwatch.ElapsedMilliseconds / (double)REPS} " + 317 $"{newSerStopwatch.ElapsedMilliseconds / (double)REPS} " + 318 $"{oldDeserStopwatch.ElapsedMilliseconds / (double)REPS} " + 319 $"{newDeserStopwatch.ElapsedMilliseconds / (double)REPS} " + 320 $"{oldCollections[0] / (double)REPS} " + 321 $"{newCollections[0] / (double)REPS} " + 322 $"{oldCollections[1] / (double)REPS} " + 323 $"{newCollections[1] / (double)REPS} " + 324 $"{oldCollections[2] / (double)REPS} " + 325 $"{newCollections[2] / (double)REPS} " + 326 $""); 327 } 328 153 329 154 330 [TestMethod]
Note: See TracChangeset
for help on using the changeset viewer.