小编Har*_*ber的帖子

Ruby中的变量分配是否真的很贵,还是优化了链式字符串方法?

我为Project Euler编写了以下方法- 问题36.它所做的就是将基数10和基数2中所有小于1,000,000的数字加起来作为回文.

def problem_36
  (1...1_000_000).select do |n|
    n.to_s == n.to_s.reverse && n.to_s(2) == n.to_s(2).reverse
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,这可以工作,并在1秒钟内给出正确的结果.我希望在1秒内得到它,所以我决定减少将数字转换为字符串的次数.所以我做了以下更改:

def problem_36
  (1...1_000_000).select do |n|
    base10 = n.to_s
    base2  = n.to_s(2)
    base10 == base10.reverse && base2 == base2.reverse
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是,这个版本实际上比原版了约50%.所以问题是:分配这两个变量真的很慢吗?或者是Ruby优化链式方法调用?

ruby string performance

7
推荐指数
1
解决办法
228
查看次数

使用Caliburn.Micro进行WPF UI自动化?

我正在尝试为使用Caliburn.MicroWhite的WPF应用程序编写一些UI自动化测试.我使用CM的内置约定将我的控件绑定到视图模型的属性和方法.我也在使用Conductor类,这样我可以在一个屏幕上看到多个视图.这通常意味着屏幕上的多个控件最终可能具有相同的x:Name值.它将被绑定到不同的视图模型.在CM附带HelloScreens示例应用程序中可以看到我想要做的好事.

我遇到的问题是我将拥有多个具有相同x:Name属性的XAML元素,以便CM可以为我处理所有绑定工作.遗憾的是,这意味着多个UIItem对象将具有相同的UI自动化ID.例如,我发现获得不同TextBlock元素的唯一方法x:Name="DisplayName"是进行如下调用:

SearchCriteria criteria = SearchCriteria.ByAutomationId("DisplayName").AndIndex(1);
WPFLabel label = myWindow.Get<WPFLabel>(criteria);
Run Code Online (Sandbox Code Playgroud)

这意味着我的测试需要知道屏幕上放置不同控件的确切顺序,这看起来非常脆弱.通过添加另一个视图模型,我可以看到我的测试全部破坏.

  • 除了使用x:Name属性之外,有没有办法指定自动化ID ?
  • 如果我直接使用UI Automation框架而不是使用White,这会更容易吗?
  • 或者,我是否真的不得不放弃CM基于约定的约束并提供每个独特的x:Name值并手动绑定它们?

更新

通过一次看到多个视图来澄清我的意思,这是我的总体布局.我有我的ShellViewModel,我从派生Conductor<IScreen>.Collection.OneActive.然后我的视图ItemsControl绑定到shell视图模型的Items属性.每个项目模板都会显示一个按钮,用于将特定内容加载IScreenContentControlshell视图中.所以,如果我试图寻找一个元素x:Name="DisplayName",我在shell视图上有标签,按钮上的ItemsControl标签以及内部的标签ContentControl.

wpf white-framework ui-automation caliburn.micro

4
推荐指数
1
解决办法
1121
查看次数