Esempio n. 1
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            var geobasePath = System.IO.Path.Combine(HostingEnvironment.ContentRootPath, GeobaseFileName);

            IGeobaseEngine geobaseEngine;

            if (GeobaseEngineType.ToLower() == "marshal")
            {
                geobaseEngine = new GeobaseEngineMarshal(geobasePath);
            }
            else if (GeobaseEngineType.ToLower() == "dirrect")
            {
                geobaseEngine = new GeobaseEngineDirrect(geobasePath);
            }
            else if (GeobaseEngineType.ToLower() == "combined")
            {
                geobaseEngine = new GeobaseEngineCombined(geobasePath);
            }
            else
            {
                throw new ArgumentException("Incorrect parameter 'GeobaseEngineType' in the config file. Please use 'marshal' or 'dirrect'.");
            }


            services.AddSingleton <IGeobaseEngine>(geobaseEngine);
        }
Esempio n. 2
0
        public void PerformanceTest()
        {
            var count = 50000;

            var stopwatch = Stopwatch.StartNew();

            var fileName      = Path.Combine(Directory.GetCurrentDirectory(), "Data\\geobase.dat");
            var engineDirrect = new GeobaseEngineDirrect(fileName);

            var offset         = (int)engineDirrect.Header.OffsetLocations;
            var resultsMarshal = new List <GeobaseLocationView>();

            for (int i = 0; i < count; i++)
            {
                var toAdd = ByteHelper.BytesToStruct <GeobaseLocationMarshal>(
                    new ArraySegment <byte>(
                        engineDirrect.Bytes, offset + i * engineDirrect.LocationLengh, engineDirrect.LocationLengh).ToArray()
                    );
                resultsMarshal.Add(TransformationHelper.GetLocationView(toAdd));
            }

            stopwatch.Stop();
            Console.WriteLine("BytesToObjectTest.PerformanceTest - get locations from bytes, marshal access time: " + stopwatch.Elapsed.TotalMilliseconds + " ms.");
            stopwatch.Restart();

            var resultsDirrect = new List <GeobaseLocationView>();

            for (int i = 0; i < count; i++)
            {
                resultsDirrect.Add(ByteHelper.GetLocation(engineDirrect.Bytes, offset + i * engineDirrect.LocationLengh));
            }

            stopwatch.Stop();
            Console.WriteLine("BytesToObjectTest.PerformanceTest - get locations from bytes, dirrect access time: " + stopwatch.Elapsed.TotalMilliseconds + " ms.");
            stopwatch.Restart();

            Assert.AreEqual(resultsDirrect.Count, count);
            Assert.AreEqual(resultsMarshal.Count, count);

            Assert.AreEqual(resultsDirrect[0].city, resultsMarshal[0].city);
            Assert.AreEqual(resultsDirrect[0].country, resultsMarshal[0].country);
            Assert.AreEqual(resultsDirrect[0].latitude, resultsMarshal[0].latitude);
            Assert.AreEqual(resultsDirrect[0].longitude, resultsMarshal[0].longitude);
            Assert.AreEqual(resultsDirrect[0].organization, resultsMarshal[0].organization);
            Assert.AreEqual(resultsDirrect[0].postal, resultsMarshal[0].postal);
            Assert.AreEqual(resultsDirrect[0].region, resultsMarshal[0].region);

            var index = count - 10;

            Assert.AreEqual(resultsDirrect[index].city, resultsMarshal[index].city);
            Assert.AreEqual(resultsDirrect[index].country, resultsMarshal[index].country);
            Assert.AreEqual(resultsDirrect[index].latitude, resultsMarshal[index].latitude);
            Assert.AreEqual(resultsDirrect[index].longitude, resultsMarshal[index].longitude);
            Assert.AreEqual(resultsDirrect[index].organization, resultsMarshal[index].organization);
            Assert.AreEqual(resultsDirrect[index].postal, resultsMarshal[index].postal);
            Assert.AreEqual(resultsDirrect[index].region, resultsMarshal[index].region);

            index = count - 1;
            Assert.AreEqual(resultsDirrect[index].city, resultsMarshal[index].city);
            Assert.AreEqual(resultsDirrect[index].country, resultsMarshal[index].country);
            Assert.AreEqual(resultsDirrect[index].latitude, resultsMarshal[index].latitude);
            Assert.AreEqual(resultsDirrect[index].longitude, resultsMarshal[index].longitude);
            Assert.AreEqual(resultsDirrect[index].organization, resultsMarshal[index].organization);
            Assert.AreEqual(resultsDirrect[index].postal, resultsMarshal[index].postal);
            Assert.AreEqual(resultsDirrect[index].region, resultsMarshal[index].region);
        }