内存不足列表中加入许多记录 [英] out of memory list join many record

查看:82
本文介绍了内存不足列表中加入许多记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有200k(  listaCorpoContabilitaFiltrato )内存中的记录列表,我需要加入 得到一些数据.但这是解决该问题的其他解决方案

Hi, i have a 200k( listaCorpoContabilitaFiltrato) record list in memory, and i need to join to get some data. But it goes out of memory is some other solution to fix the problem

                        var query = new ObservableCollection<CorpoContabilita>(
                        from bilancio in listaCorpoContabilitaFiltrato
                        join dittaAss in newSednaContext.DittaAssociata on bilancio.CodiceDittaAssociata equals dittaAss.Codice into leftJoinDittaAss
                        from dittaAssLeft in leftJoinDittaAss.DefaultIfEmpty()
                        join conto in newSednaContext.Conti on bilancio.CodiceContoContabile equals conto.Codice
                        join mastro in newSednaContext.Mastro on conto.CodiceMastro equals mastro.Codice
                        join gruppo in newSednaContext.Gruppo on mastro.CodiceGruppo equals gruppo.Codice
                        select new CorpoContabilita
                        {
                            CodiceDittaAssociata = bilancio.CodiceDittaAssociata,
                            GruppoDittaAssociata = dittaAssLeft?.CodiceGruppoDittaAssociata,
                            CodiceContoContabile = bilancio.CodiceContoContabile,
                            DescrizioneContoContabile = bilancio.DescrizioneContoContabile,
                            DescrizioneContoContabileOriginale = bilancio.DescrizioneContoContabileOriginale,
                            TipoFornitore2 = bilancio.TipoFornitore2,
                            TipoConto = bilancio.TipoConto,
                            ImportoDare = bilancio.ImportoDare,
                            ImportoAvere = bilancio.ImportoAvere,
                            EconomicoPatrimoniale = conto.EconomicoPatrimoniale,
                            CodiceMastro = mastro.Codice,
                            DescrizioneMastro = mastro.Descrizione,
                            CodiceGruppo = mastro.CodiceGruppo,
                            DescrizioneGruppo = mastro.DescrizioneGruppo,
                            EconomicoPatrimonialeGruppo = gruppo.EconomicoPatrimoniale,
                            SezioneBilancioGruppo = gruppo.SezioneBilancio,
                            ExtraContabile = bilancio.ExtraContabile
                        });

推荐答案

200K的数据要大量存储在内存中,特别是当您进行大量连接时.您可以将其移至可以更高效地完成操作的数据库中吗?如果不是,那么您可能需要对调用进行分区,以便仅在 时间.您拥有的联接数将导致使用大量的临时数据.您的对象本身似乎有17个成员(字符串?),这意味着您的原始结构可能约为30 + MB.

200K of data is a lot to store in memory especially when you're doing so many joins. Can you move it to a DB where it can be done more efficiently? If not then you probably need to partition the calls so you're only working with a subset of the data at a time. The number of joins you have is going to result in a lot of temp data being used. Your object itself has what appears to be 17 members (strings?) which means your raw structure is probably 30+MB as it is. 

另一种方法是对数据重新排序,因此您不需要那么多的联接.大量的连接通常意味着数据被过度规范化.如果您需要进行大量联接,则对数据进行非规范化或考虑使用报告数据库是一个不错的选择.

An alternative is to reorder your data so you don't need that many joins. Lots of joins generally means the data is over normalized. If you need to do joins a lot then denormalizing the data or considering a reporting database is a good option.

迈克尔·泰勒
http://www.michaeltaylorp3.net

Michael Taylor
http://www.michaeltaylorp3.net


这篇关于内存不足列表中加入许多记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆