Context.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using FrameworkBench;
  3. using Revenj.DatabasePersistence;
  4. using Revenj.DomainPatterns;
  5. using Revenj.Extensibility;
  6. namespace Revenj.Bench
  7. {
  8. internal class Context
  9. {
  10. public readonly IPersistableRepository<World> WorldRepository;
  11. public readonly IQueryableRepository<Fortune> FortuneRepository;
  12. public readonly Random Random = new Random(0);
  13. public readonly World[] Worlds = new World[512];
  14. private readonly IDatabaseQueryManager QueryManager;
  15. private readonly IDatabaseQuery Query;
  16. //private readonly IRepositoryBulkReader BulkReader;
  17. //private readonly Lazy<World>[] LazyWorlds = new Lazy<World>[512];
  18. public Context(IObjectFactory factory, IDatabaseQueryManager manager)
  19. {
  20. QueryManager = manager;
  21. var scope = factory.CreateScope(null);
  22. Query = manager.StartQuery(false);
  23. scope.RegisterInterfaces(Query);
  24. WorldRepository = scope.Resolve<IPersistableRepository<World>>();
  25. FortuneRepository = scope.Resolve<IQueryableRepository<Fortune>>();
  26. //BulkReader = scope.BulkRead(ChunkedMemoryStream.Static());
  27. }
  28. /* bulk loading of worlds. use such pattern for production code */
  29. /*public void LoadWorldsFast(int repeat, World[] worlds)
  30. {
  31. BulkReader.Reset(true);
  32. for (int i = 0; i < repeat; i++)
  33. {
  34. var id = Random.Next(10000) + 1;
  35. LazyWorlds[i] = BulkReader.Find<World>(id.ToString());
  36. }
  37. BulkReader.Execute();
  38. for (int i = 0; i < repeat; i++)
  39. worlds[i] = LazyWorlds[i].Value;
  40. }*/
  41. /* multiple roundtrips loading of worlds. don't write such production code */
  42. public void LoadWorldsSlow(int repeat, World[] worlds)
  43. {
  44. for (int i = 0; i < repeat; i++)
  45. {
  46. var id = Random.Next(10000) + 1;
  47. worlds[i] = WorldRepository.Find(id);
  48. }
  49. }
  50. ~Context()
  51. {
  52. QueryManager.EndQuery(Query, true);
  53. }
  54. }
  55. }