小编Rob*_*sen的帖子

为什么这个F#代码这么慢?

Levenshtein在C#和F#中的实现.对于两个大约1500个字符的字符串,C#版本快10倍.C#:69 ms,F#867 ms.为什么?据我所知,他们完全一样吗?无论是Release还是Debug构建都无关紧要.

编辑:如果有人来这里专门寻找编辑距离实施,它就会被打破.工作代码在这里.

C#:

private static int min3(int a, int b, int c)
{
   return Math.Min(Math.Min(a, b), c);
}

public static int EditDistance(string m, string n)
{
   var d1 = new int[n.Length];
   for (int x = 0; x < d1.Length; x++) d1[x] = x;
   var d0 = new int[n.Length];
   for(int i = 1; i < m.Length; i++)
   {
      d0[0] = i;
      var ui = m[i];
      for (int j = 1; j < n.Length; j++ )
      { …
Run Code Online (Sandbox Code Playgroud)

c# performance f# inline

125
推荐指数
1
解决办法
2万
查看次数

我应该在SqlClr中运行F#吗?

我需要在Sql中运行.Net代码,我试图在F#和C#之间做出决定.我现在在F#中做的代码越来越多,所以如果它不是太不切实际,我希望它是F#.

是否有可能强制VS2010将我的F#程序集(及其引用)部署到Sql Server,这与C#项目的做法相同?

你会建议/不建议在Sql中运行F#吗?为什么?

编辑: 我同意语言更好,这不是问题.我主要想知道是否有人在SqlClr中使用F#的经验,特别是如果工具可以提供简单的开发工作流程,即在VS2010中部署.

编辑2: 我正在尝试这个,手动注册是非常痛苦的.此外,CREATE ASSEMBLY你必须注册每个函数,sp,聚合等.你还必须先按正确的顺序删除它们,如果它们存在,以免你得到一个DROP ASSEMBLY failed because 'Nibbler' is referenced by object 'Hello'.

然后,我有了使用C#项目作为前端的想法,让这个项目引用一个F#项目,只是为了让所有这些部署自动处理.事实证明,您只能引用其他C#/ VB Sql Clr项目或已在Sql中引用的程序集.这仍然可以简化部署,因为所有功能的创建/删除等都将自动处理.然后,为了从测试部署到生产,我只会从我的测试环境中注册的所有内容生成脚本.

PS.我还尝试摆弄.fsproj文件,与C#Clr项目的.csproj进行区分,以使部署无济于事.

c# sql-server f# sqlclr

13
推荐指数
2
解决办法
1021
查看次数

WPF数据虚拟化ListView

在我们当前的WinForms应用程序中,我们使用虚拟化在ListView中显示数百万条记录.在请求时从DB加载行.这很好,性能很好.

这是一个为我们迁移到WPF的showstopper.我们需要在ListView中进行数据虚拟化,就像WinForms 2.0一样.

你知道一个体面的第三方控件,或者使用内置控件进行相对简单的方法吗?它不需要是一个DataGrid,一个简单的ListView就足够了.

请注意,我注意到了UI虚拟化,它是数据虚拟化.

wpf virtualization performance listview

12
推荐指数
1
解决办法
2万
查看次数

类型差异很小

我有三个应该是平等的功能:

let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1) 
Run Code Online (Sandbox Code Playgroud)

为什么这些方法的类型不同?
add1和add3是int -> int,但add2是(int -> int).他们都按预期工作,我只是好奇为什么FSI以不同的方式呈现它们?

syntax f#

11
推荐指数
1
解决办法
294
查看次数

TFS 2012 .gitignore .hgignore等效

在TFS 2012中,有一种新的本地工作空间模式.

这是个好消息:

  • 没有"检出"文件
  • 使用VS以外的程序中的文件时,不再有只读文件和问题.
  • 没有更多'获取最新'实际上没有获得最新

但这也意味着我需要一种方法来告诉TFS在监视文件系统进行更改时要忽略哪些文件.在TFS2012中如何处理?

version-control tfs tfs2012

11
推荐指数
1
解决办法
2363
查看次数

CLR表如何重视"流媒体"功能?

表值Sql Clr函数上MSDN Docs指出:

Transact-SQL表值函数将调用函数的结果实现为中间表....相反,CLR表值函数表示流式替代.不要求在单个表中实现整个结果集.托管函数返回的IEnumerable对象由调用表值函数的查询的执行计划直接调用,结果以增量方式使用....如果返回的行数非常多,它也是一个更好的选择,因为它们不必在整个内存中实现.

然后我发现"填充行"方法中不允许任何数据访问.这意味着您仍然必须在init方法中执行所有数据访问并将其保留在内存中,等待调用"填充行".我误解了什么吗?如果我不将结果强制转换为数组或列表,则会出现错误:'ExecuteReader需要一个开放且可用的连接.连接的当前状态已关闭.

代码示例:

[<SqlFunction(DataAccess = DataAccessKind.Read, FillRowMethodName = "Example8Row")>]
static member InitExample8() : System.Collections.IEnumerable = 
   let c = cn() // opens a context connection
   // I'd like to avoid forcing enumeration here:
   let data = getData c |> Array.ofSeq
   data :> System.Collections.IEnumerable

static member Example8Row ((obj : Object),(ssn: SqlChars byref)) = 
   do ssn <- new SqlChars(new SqlString(obj :?> string))
   ()
Run Code Online (Sandbox Code Playgroud)

我在这里处理几百万行.有没有办法懒惰地这样做?

sql-server f# sqlclr

10
推荐指数
1
解决办法
4894
查看次数

使用F#中的System.String.Split

我想在F#中使用.NET CLR版本的String.Split.具体来说我想使用这段代码:

let main argv = 
    let s = "Now is the time for FOO good men to come to the aide of their country"
    let sepAry = [|"FOO"; "BAR"|]
    let z1 = s.Split sepAry
    0 // return an integer exit code
Run Code Online (Sandbox Code Playgroud)

然而,由于(我相信)F#中的Split版本的实现方式与.Net 4.5中的版本不同,因此无法编译.我想要的.NET版本是:

Split(String [],StringSplitOptions)返回一个字符串数组,该数组包含此字符串中的子字符串,这些子字符串由指定字符串数组的元素分隔.参数指定是否返回空数组元素.

我知道我得到的是F#版本的Split,以前存在于PowerPack中,这就是为什么实现与CLR版本不同的原因.

得到我想要的最好的方法是什么?是否可以覆盖F#版本的Split并使用.Net版本?是否有可能扩展F#版本,如果是这样,如何?

f# f#-3.0

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

vanilla .Net 4上的Visual Studio Async CTP?

我理解它的方式,C#5 CTP中新的Async-Await功能应该全部在编译器中实现.这应该意味着使用CTP编译的代码应该能够在vanilla .Net 4上运行吗?

它可以?

c# async-await async-ctp

6
推荐指数
2
解决办法
750
查看次数

移植到工作区而无需提交

有没有办法在没有提交的情况下移植一个变更集?我希望能够在提交之前查看更改.

mercurial transplant

5
推荐指数
1
解决办法
2155
查看次数

描述 PostgreSQL 中的结果集?

在 Microsoft Sql Server 中,有一个 proc sys.sp_describe_first_result_set,它接受一个任意的 sql 查询字符串并返回描述结果集中的类型的数据,如果它被执行。请注意,这是描述复杂查询的结果,而不是表。MSDN参考

Postgres 有类似的东西吗?

sql-server postgresql

5
推荐指数
1
解决办法
497
查看次数