2
我有一個程序,從需要轉換爲Go的內存映射讀取173(c)數據結構。類型的值在這些結構中作爲字符串存儲。該結構每秒接收60次。解決反射開銷的最佳方法是什麼?
我現在使用反射(FieldByName
)來獲取對結構字段的引用並設置接收到的數據。但是因爲有很多領域(173),並且他們得到了很多更新,所以這些廣告開銷很大,而且函數調用是我的程序中最慢的部分(jay go prof
!)。
使這個更快的最佳方法是什麼?至於我可以看到我有三個選項:
- 緩存
reflect.Value
的地圖中,並接收數據的功能,使用模板結構依賴於緩存地圖,填補結構和返回副本該模板結構 go generate
所有的setter和一個巨大的switch語句爲每個接收現場- 只是所有代碼的不同制定者的
什麼是「最好」的選擇?有沒有我忽略的選項?