【发布时间】:2018-12-27 16:37:29
【问题描述】:
我正在运行一个循环来评估用户提供的超过 150k 个对象的输入。用户将信息设置为“obj.Name”、“obj.Path”、“obj.Date”......其中可能还包含逻辑评估,例如“IIf(obj.Params>5,1,0)” .然后将其作为字符串提供给程序。
我使用了 Evaluate() 函数,它运行良好,只是它很慢。遍历所有元素需要将近 6 小时。我在想是否有一种方法可以获取请求的信息并以某种方式将其转换为直接的可执行文件,并避免在整个循环中使用 Evaluate 表达式(它针对用户请求的数据数量运行* 150k)。
这是我正在运行的循环的示意图:
For Each Object in ObjectsList
For Each UserRequest in Requests
ResultsMatrix(i,j) = Evaluate(Requests(i))
j += 1
Next
i += 1
Next
然后我将结果存储在一个矩阵中,该矩阵最后粘贴到一个 Excel 文件中。有没有一种方法可以将要评估的字符串转换为函数的返回值?我想避免使用 Eval 函数并直接解析可执行文件中的字符串,而不是为每个对象评估它。关于加速循环的任何提示?
【问题讨论】:
-
如果同一请求发生多次,您可以存储该值而不是再次评估它。
-
就代码而言,最重要的是在
Evaluate(...)调用中计算的内容,但缺少了这一点。我们需要一个minimal reproducible example。 -
stackoverflow.com/q/1707854/11683 向您发送了正确的方向,但您使用 VB 编写代码这一事实可能会限制您的选择。
-
我投票结束这个问题作为离题,因为它要求审查。请将其发送至Code Review,然后关闭此问题。
标签: vb.net loops optimization foreach evaluate