443 messaggi dal 11 febbraio 2013
Ciao,
ho la necessità di ottimizzare e generare un messaggio al termine di un metodo in una webapp form.

Il metodo legge l'articolo in una tabella dove sono riportati gli ordini per quell'articolo
ordinati per priorità (numero ordine,cliente,articolo, priorità).

Legge la quantità di magazzino e la scrive ovviamente stornando le quantità assegnate altrimenti farebbe contenti tutti.
...in sostanza ottimizza gli ordini che si possono spedire.

Ho notato che sopra i 10mila recods può non terminare correttamente (esempio ora non ha scritto gli ultimi 600 records).

questo è il metodo che ho scritto
public void AssegnaEistenza(IJobCancellationToken cancellationToken)
        {
            using (Entities db = new Entities)
            {
                //db.Database.Log = query =>  File.AppendAllText(System.Web.HttpContext.Current.Server.MapPath("/App_Data/querylog.txt"), query) ; 
                Int32 rows = db.DETTAGLIO_ORDINE_SELEZIONATO.Select(o => o.DOS_Anno).Count() -1 ;

                List<DETTAGLIO_ORDINE_SELEZIONATO> listaOrdini = (from o in db.DETTAGLIO_ORDINE_SELEZIONATO
                                                                   select o).OrderBy(o=>o.DOS_Codart).
                                                                              ThenBy(o=>o.DOS_Codvar).
                                                                              ThenBy(o=>o.DOS_Priorita).ToList();
                db.Configuration.AutoDetectChangesEnabled = false;
                int totalProgress = 0;
                for (int index = 0; index < rows; index++)
                {
                   totalProgress = (int)((double)index / rows * 100);
                   HubProgresso.AggiornaProgresso(inEsecuzione: true, percentuale: totalProgress);

                   string currentCodArt = listaOrdini[index].DOS_Codart;
                   string currentCodVar = listaOrdini[index].DOS_Codvar;
                   string NextCodart = listaOrdini[index + 1].DOS_Codart;
                   string NextCodvar = listaOrdini[index + 1].DOS_Codvar;
                 
                    double esistenza = ESISTENZE_MAGAZZINO.LeggiEsistenzePerArticoloVariante(currentCodArt, currentCodVar) - QuantitaAssegnataProgressiva;
                   
                    if(esistenza > 1) // TOLLERANZA
                    {
                        if(esistenza >= listaOrdini[index].DOS_QuantitaOrdinata)
                        {
                            listaOrdini[index].DOS_QuantitaAssegnata = listaOrdini[index].DOS_QuantitaOrdinata;
                        }
                        else
                        {
                            listaOrdini[index].DOS_QuantitaAssegnata = esistenza;
                        }
                    }
                    else
                    {
                        listaOrdini[index].DOS_QuantitaAssegnata = 0;
                    }

                    if (currentCodArt== NextCodart && currentCodVar==NextCodvar)
                    {
                        QuantitaAssegnataProgressiva += listaOrdini[index].DOS_QuantitaAssegnata;
                    }
                    else
                    {
                        QuantitaAssegnataProgressiva = 0;
                    }

                    db.Configuration.AutoDetectChangesEnabled = true;
                    db.SaveChanges();

                    try
                    {
                        cancellationToken.ThrowIfCancellationRequested(); 
                    }
                    catch
                    {
                        break; //throw;
                    }
                }

                HubProgresso.AggiornaProgresso(inEsecuzione: false);
            }
        }


LeggiEsistenzePerArticoloVariante non è solo una semplice lettura ma lasciamo stare...non è li che si intrippa

Credo che l'ottimizzazione sia fuori dalle mie attuali competenze anche se quello che faccio è molto semplice

spero in un vostro suggerimento come sempre
ciao
443 messaggi dal 11 febbraio 2013
portando fuori dal loop il db.Savechanges()
non ho miglioramenti

però non usando siganlR e hangfire sembra andare molto ma molto piu veloce !

è possibile ?
Modificato da jjchuck il 06 ottobre 2017 15.52 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.