Construyendo entidades de API con llaves extranjeras -- # campo con uwp camp codereview Relacionados El problema

Constructing entities from API with foreign keys


6
vote

problema

Español

Estoy cargando tres tipos de entidades de una API (en formato CSV, desafortunadamente). Mientras que los dos primeros están bien, el tercero tiene llaves extranjeras para ambas. Lo que actualmente está haciendo está construyendo las dos primeras listas y luego, mientras se está construyendo la tercera lista, asigna las entidades para cada artículo. Así es como se ve:

  std::unordered_map2  

Las estaciones y las líneas son conjuntos que se han construido de la misma manera (solo sin FK). Hirchy-Wise quiero que las estaciones incluyan una lista de placas y cada plataforma tenga la línea correspondiente. También obtengo esto utilizando el método actual, ya que el marco de la entidad maneja las dependencias.

Mi problema es que este método de Runnig Dos selecciona para cada elemento de la plataforma toma varios segundos y estoy usando estos datos para sugerencias de entrada que me gustaría estar disponible lo antes posible

¿Hay una forma más eficiente de asignar las dependencias correctas?

Si falta alguna información importante, dígame

Original en ingles

I'm loading three kinds of entities from an API (in csv format unfortunately). While the first two are fine, the third has foreign keys to both of them. What I'm currently doing is constructing the first two lists and then while constructing the third list I assign the entities for every item. This is how it looks:

var platforms = await Task.Run(() => parsed.Data.Select(p => CreatePlatform(p,stations,lines)).ToList());  private static Platform CreatePlatform(Dictionary<string, string> data, List<Station> stations, List<Line> lines)     {         if (data.Keys.Except(PlatformFields).Any())             return null; // TODO log; invalid data format         Platform platform = null;         try         {             platform = new Platform             {                 SteigId = Convert.ToInt32(data["STEIG_ID"]),                 Richtung = data["RICHTUNG"],                 Reihenfolge = Convert.ToInt32(data["REIHENFOLGE"]),                 RblNummer = string.IsNullOrEmpty(data["RBL_NUMMER"]) ? null : (int?) Convert.ToInt32(data["RBL_NUMMER"]),                 Bereich = string.IsNullOrEmpty(data["BEREICH"])? null : (int?) Convert.ToInt32(data["BEREICH"]),                 Steig = data["STEIG"],                 SteigWgs84Lat = Convert.ToDouble(data["STEIG_WGS84_LAT"]),                 SteigWgs84Lon = Convert.ToDouble(data["STEIG_WGS84_LON"]),                 Stand = data["STAND"],                  Station = stations.Single(s => s.HaltestellenId == Convert.ToInt32(data["FK_HALTESTELLEN_ID"])),                 Line = lines.Single(l => l.LinienId == Convert.ToInt32(data["FK_LINIEN_ID"]))              };         }         catch (FormatException ex)         {             return null; // TODO log;         }         return platform;     } 

Stations and Lines are sets that have been constructed in the exact same way (only without fk's). Hirarchy-wise I want the Stations to include a list of plattforms and each platform has the corresponding line. I also get this using the current method as entity framework handles the dependencies.

My problem is that this method of runnig two selects for every Platform item takes multiple seconds and i'm using this data for input suggestions which i'd like to be available as soon as possible

Is there a more efficient way of assigning the correct dependencies?

If there's some important information missing please tell me

     
 
 

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

Uso de sum += array[j]3 en una lista sin clasificar tiene costo de O (n). Si usa una estructura de datos con búsquedas de tiempo constante, por ejemplo. A sum += array[j]4 y un sum += array[j]5 En su lugar, debería ver una mejora de rendimiento usando la búsqueda de teclas:

  sum += array[j]6  

Como está usando soltero, asumí que el diccionario definitivamente contendrá la entrada.

No sé cómo está creando sus listas, pero hay el sum += array[j]7 método que podría ser útil:

  sum += array[j]8  
 

Using .Single() on an unsorted list has O(n) cost. If you use a data structure with constant time lookups e.g. a Dictionary<int, Station> and a Dictionary<int, Line> instead you should see a performance improvement using key lookup:

Station = stations[Convert.ToInt32(data["FK_HALTESTELLEN_ID"])], Line = lines[Convert.ToInt32(data["FK_LINIEN_ID"])] 

As you're using Single, I assumed that the dictionary will definitely contain the entry.

I don't know how you're creating your Lists but there is the Enumerable.ToDictionary method which could be useful:

var stationsLookup = stations.ToDictionary(s => s.HaltestellenId); 
 
 

Relacionados problema

6  UWP Scan para archivos de música  ( Uwp scan for music files ) 
Estoy implementando un reproductor de música para Windows 10, y estoy en un poco de pepinillo en la fase de la biblioteca. Estoy escaneando para todos los a...

2  Guardar / Cargar el diseño de GridView usando SettingService  ( Save load gridview layout using settingsservice ) 
Soy capaz de guardar mi GridView Diseño Al guardar un string Representación de los elementos en el 9988777665544339 . Luego cargue ese __getitem__0 Rep...

3  Lista de dispositivos Bluetooth cercanos, así como dispositivos en la base de datos  ( List nearby bluetooth devices as well as devices in the database ) 
Hice una lista de todos los dispositivos de impresora cercanos (que coinciden con el mismo nombre en la base de datos), así como todos los dispositivos de imp...

1  Acelerar el diseño de texto UWP  ( Speed up text layout uwp ) 
He creado un control que carga texto, con RichTextBlock y RichTextBlockOverFlow. El control no es muy rápido, de hecho, lo que me gustaría acelerar es el méto...

4  Configuración de NavigationService y Navegación de navegación en un solo lugar  ( Configuring navigationservice and navigationview in one place ) 
contexto El objetivo principal ubicado una configuración NavigationService y 9988776655544331 en un solo lugar. Con el fin de minimizar una consecuencia...

2  Límite y fusión de operaciones de ahorro  ( Limit and merge saving operations ) 
use caso: Quiero guardar automáticamente datos en el almacenamiento cuando una propiedad de un objeto que implemente los cambios de inotifyPropertyChanged. ...

2  Aplicando EF Core en las aplicaciones universales de Windows utilizando una base de datos grande  ( Applying ef core in universal windows apps using a large database ) 
Estoy construyendo mi aplicación UWP y realmente estancada en la arquitectura. Durante los últimos días, he estado leyendo MVVM, marco de entidades, SQLite, c...

6  Editor de la junta de damas  ( Checkers board editor ) 
He creado un editor de la junta para mi juego de damas. Esto permite al usuario crear cualquier posición de la placa y copiar la cadena de fen que representa ...

3  Comando de llamada MVVM por nombre de CommandBindings  ( Mvvm calling command by name from commandbindings ) 
Por ejemplo, tengo esta propiedad en mi ViewModel . public IStorageFolder CurrentFolder { get { return _currentFolder; } set {...

2  Control personalizado de calendario  ( Custom calendarpicker control ) 
Tengo una vista de calendario que es lenta en la carga. La parte que ralentiza el calendario debe estar en el calendarioviewmodel.cs. Pero no sé cómo mejorarl...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos