2015-07-25 2 views
2

Я профилировал свой код и обнаружил, что> 50% времени работы тратится на строку, присваивающую значение в словаре Swift.Оптимизация скорости выполнения Swift Dictionary

Running Time Self (ms)  Symbol Name 
10675.0ms 51.0% 9.0       Swift.Dictionary.subscript.setter (A) -> B? 

Это вторая строка этого Fuction

func isConsistent<V, D>(variable: V, value: D, assignment: Dictionary<V, D>, csp: CSP<V,D>) -> Bool { 
    var tempAssignment = assignment 
    tempAssignment[variable] = value 

Это одна строка в программе среднего размера (который принимает нетривиальное времени (~ 80 секунд на моем 1,7 Ггц i7) для выполнения) и эта конкретная линия не называется чаще, чем большинство других. Как я могу ускорить его?

+0

см http://stackoverflow.com/questions/31353299/swift-dictionary -slow-even-with-optimizes-doing-uncessary-keep-release – matt

+0

Это год и не относится к назначению как к проблеме. – davecom

+0

Почему downvote? – davecom

ответ

0

словарь типы значений, что означает, что будут скопированы каждый раз, когда вы назначаете его в другую переменную Попробуйте удалить правопреемником Заявление о

func isConsistent<V, D>(variable: V, value: D, assignment: Dictionary<V, D>, csp: CSP<V,D>) -> Bool { 
     //var tempAssignment = assignment//remove this line 
     assignment[variable] = value // use assignment instead 
+0

Вы не можете выполнить это назначение - помните, что исходный словарь «назначение» является параметром функции. – davecom

+0

Вы объявляете аргумент как 'var assign: Dictionary ', и вы можете его изменить. Измените его локально; если вы хотите, чтобы измененный в словаре словарь изменился, ваша потребность 'inout'. – GoZoner

Смежные вопросы