2016-01-14 168 views
1

我有一段用Iron Python編寫的代碼,它從SpotFire中的表中讀取數據,並在JSON對象中進行序列化。執行時間太長。請提供替代它。Ironpython代碼執行時間太長?

import clr 
import sys 
clr.AddReference('System.Web.Extensions') 
from System.Web.Script.Serialization import JavaScriptSerializer 
from Spotfire.Dxp.Data import IndexSet 
from Spotfire.Dxp.Data import DataValueCursor 

rowCount = MyTable.RowCount 
rows = IndexSet(rowCount,True) 
cols = MyTable.Columns 
MyTableData=[] 

for r in rows: 
list={} 
item={} 
for c in cols: 
    item[c.Name] = c.RowValues.GetFormattedValue(r) 
    list['MyData']=item 
MyTableData.append(list) 

json=JavaScriptSerializer(MaxJsonLength=sys.maxint).Serialize(MyTableData) 
+0

所以它成功執行,但需要太多時間? –

+0

多久太久了?是什麼讓你覺得它應該更短? –

+0

你爲每個'c'調用'list ['MyData'] = item'。你應該在循環之後調用一次。 –

回答

0

如果您不針對每列調用list['MyData']=item,那麼您的代碼將更快。你只需要調用一次。

您也可以使用list and dictionary comprehensions,而不是追加或查找每個值的鍵。

MyTableData = [{'MyData': {column.Name: column.RowValues.GetFormattedValue(row) 
          for column in cols}} 
       for row in rows] 

如果column.RowValues是昂貴的操作,你可能會超過列更好的循環,這是不一樣整齊。