溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

動態(tài)多字段導(dǎo)出解決方案

發(fā)布時間:2020-07-02 05:33:34 來源:網(wǎng)絡(luò) 閱讀:338 作者:范忠華 欄目:編程語言

一、問題來源

1.1問題現(xiàn)象

動態(tài)多字段導(dǎo)出內(nèi)存溢出

 

1.2問題分析

從問題的現(xiàn)象中找不到問題出現(xiàn)根源,需要通過捕獲異常來分析問題具體出在那


通過不同參數(shù)導(dǎo)出測試,發(fā)現(xiàn)30個以內(nèi)的列名導(dǎo)出沒有問題,超過其上限在datatable給控鍵(原來用aspose控件)賦值中就拋出了異常。當(dāng)初以為是控件問題,就嘗試用NOPI控件,但是問題依然存在。由此可見內(nèi)存溢出很大原因是來自要到導(dǎo)出的列名太多(73個字段),讀取datatable的值時導(dǎo)致了內(nèi)存溢出,需要用另一種方式來替換通過讀取datatable賦值的方式來實(shí)現(xiàn)給導(dǎo)出控件賦值。

 

 

二、解決方法

找到了導(dǎo)致問題出現(xiàn)的最大可能,接下來就是如何去解決。如果每次都是全部導(dǎo)出,這個問題好解決,直接通過foreach逐行讀取對象集合給控件賦值就ok了,問題是需要按照客戶選定的列名動態(tài)導(dǎo)出,找出需要導(dǎo)出的字段與其對象屬性的對應(yīng)關(guān)系是解決問題的關(guān)鍵所在。當(dāng)時嘗試用了通過xml配置文件找到它們對應(yīng)關(guān)系,但并未能實(shí)現(xiàn),原因是動態(tài)控制難實(shí)現(xiàn)。有時候思路錯了,思考的方向錯了,問題會越陷越深,出現(xiàn)無頭緒的狀態(tài)。在這個時候我們應(yīng)該跳出來,重新去審視這個問題,用另一種方法去解決。通過重新審視問題,發(fā)現(xiàn)要建立關(guān)系,表頭必須是要存放在二維的表中,只要建立一張基礎(chǔ)關(guān)系數(shù)據(jù)表,用來對象給導(dǎo)出控件賦值遍歷識別是否是用戶選中的列名。這基礎(chǔ)數(shù)據(jù)表要求數(shù)據(jù)全即涵蓋全部的導(dǎo)出字段,且每個字段需有一個對應(yīng)的固定的標(biāo)記空間用來標(biāo)記用戶是否選中這個字段。動態(tài)表頭存放在datatable中,沒有處理的表頭數(shù)據(jù)與基礎(chǔ)關(guān)系表的表頭一致,再通過轉(zhuǎn)過來列名進(jìn)行篩選,保證數(shù)據(jù)的一致性。在此之前需要給這73個列名固定的順序(按照客戶需求的排序)。從而得出解決方案,如下圖


附件:http://down.51cto.com/data/2365315
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI