小编Car*_*ngo的帖子

当引发异常时返回堆栈跟踪时,如何进行C#尾递归优化

我在C#中看到了一些关于丢失尾部调用优化的问题,据说这种语言不适合递归算法实现.然而,这引出了一个问题,我们如何进行尾调用优化,并在引发异常时或者可以使用反射来检查调用堆栈并对其进行操作时仍提供合理的堆栈跟踪.

c# tail-call tail-call-optimization

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

在SQL Server上将堆索引转换为聚簇索引会产生什么后果?

我最近得到了建议,我应该使用堆索引转换所有表,以便每个表都有一个聚簇索引.坚持这一战略会产生什么后果?例如,定期重组数据库更重要吗?datagrowth?插入真的很慢的危险?如果PK是GUID,页面碎片整理的危险?我的申请速度明显增加了吗? 你有什么经历?

为了获得良好答案的灵感,以下是我在stackoverflow上从其他线程中获取的一些"事实"

  1. 几乎肯定希望在数据库中的每个表上建立聚簇索引.如果一张桌子没有.大多数常见查询的性能更好.
  2. GUID上的聚簇索引并不总是坏...这一切都取决于应用程序的需求.INSERT速度将受到影响,但SELECT速度将得到提高.
  3. GUID字段中的聚簇索引的问题是GUID是随机的,因此当插入新记录时,必须移动磁盘上的大部分数据以将记录插入到表的中间.
  4. 在GUID具有意义的情况下,GUID上的聚簇索引是正常的,并通过将相关数据彼此靠近来提高性能http://randommadness.blogspot.com/2008/07/guids-and-clustered-indexes.html
  5. 群集不会影响查找速度 - 唯一的非群集索引应该可以完成工作.

sql sql-server indexing clustered-index

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

SQL Server 上用于查询成本估算的 SQL

在 SQL Server 中,是否有一些神奇的 SQL 我可以预先准备 SQL 查询以获得估计的查询成本而不是执行的查询?

可能像下面这样的东西是我自己的最佳猜测..虽然看起来很冗长

SET STATISTICS PROFILE ON
GO

SELECT *  FROM [Account]

GO 
SET STATISTICS PROFILE OFF
Run Code Online (Sandbox Code Playgroud)

sql sql-server estimation

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

如何创建只接受int32或int64的函数

如何定义在F#的函数f只接受一个参数x被限制为类型int32int64

f#

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

为什么不能为嵌套函数推断类型

我不了解嵌套函数的F#类型推理系统.当我使用简单类型之外的类型(如int,string,...)时,它似乎特别破碎

这是一些打印一些反射信息的代码的小例子

let inferenceTest () =
    let t = int.GetType()
    let methods = t.GetMethods() |> Seq.map(fun m -> m.Name)
    printfn "%s" <| String.concat ", " methods
Run Code Online (Sandbox Code Playgroud)

这很好用!不需要铸造等.现在假设打印涉及更多,因此我们希望将其分离为嵌套功能

let inferenceTestFailsToCompile () =
    let printType t =
        let methods = t.GetMethods() |> Seq.map(fun m -> m.Name)
        printfn "%s" <| String.concat ", " methods

    let t = int.GetType()
    printType t    
Run Code Online (Sandbox Code Playgroud)

这失败了"基于此程序点之前的信息查找不确定类型的对象.可能需要类型注释......"

为什么类型系统的信息突然减少?也许我能理解问题,因为我的printType()功能与我的功能相同inferenceTestFailsToCompile()

当我改为创建一个以t闭包形式出现的lambda时,打字问题就消失了

let inferenceTestLambda () =
    let t = int.GetType()
    let printType =
        let methods = t.GetMethods() …
Run Code Online (Sandbox Code Playgroud)

f# types type-inference

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

功能C# - 使用或返回Action

浏览网络以便在C#中更好地处理故障,我将通过以下内容实现策略.第一个对我来说很自然,而另一个实现我不确定它的优点是什么?

1)

static void Fault(Action protectedBlock, Action faultHandler)
{ 
    try
    {
        protectedBlock();
    }
    catch
    {
        faultHandler();
        throw;
    }
}

 

static Action Fault(Action protectedBlock, Action faultHandler)
{
    return () =>
    {
        try
        {
            protectedBlock();
        }
        catch
        {
            faultHandler();
            throw;
        }
    };
}

Run Code Online (Sandbox Code Playgroud)
static void Fault(Action protectedBlock, Action faultHandler)
{ 
    try
    {
        protectedBlock();
    }
    catch
    {
        faultHandler();
        throw;
    }
}

2)

static Action Fault(Action protectedBlock, Action faultHandler)
{
    return () =>
    {
        try
        {
            protectedBlock();
        }
        catch
        {
            faultHandler();
            throw;
        }
    }; …

c# metaprogramming higher-order-functions

3
推荐指数
1
解决办法
237
查看次数

Type参数从类型参数设置

如何将我的参数转换为正确的类型声明.IE浏览器.如何从去typeT下面

class Foo<T>
{  
  Foo<??> MakeFoo(Type type)
  {
    return new Foo<??>();
  }

  Void Get(T aFoo)
  {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

c# type-parameter

3
推荐指数
1
解决办法
132
查看次数

球拍简易AE定义型

从第6页的"编程语言:应用程序和解释"一书中,我尝试编写DrRacket中的第一个示例

#lang typed/racket

(define-type AE
 [num (n number?)]
 [add (lhs AE?) (rhs AE?)]
 [sub (lhs AE?) (rhs AE?)])
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误

aeinterpretter.rkt:5:2: define-type: unexpected term in: (add (lhs AE?) (rhs AE?))
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

racket

3
推荐指数
1
解决办法
1204
查看次数

获取南希请求信息

我刚开始看南希,我正在使用Tekpub的Sinatra Video(Nancy的基础),看看它能做些什么.视频中演示的一件事是将请求信息输出回浏览器(请求方法,请求路径等).当我使用ASP.Net Web Forms时,我可以在Request对象中获取该信息,但是我没有在文档中看到任何显示我如何在Nancy中执行此操作的内容.我知道Nancy.Request对象中有一个Headers字段,但它没有给我所有我想要的信息.下面是我要转换为C#和Nancy的原始Sinatra代码:

class HelloWorld
     def call(env)
          out = ""
          env.keys.each {|key| out+="#{key}=#{env[key]}"}
          ["200",{"Content-Type" => "text/plain"}, out]
     end
 end

 run HelloWorld.new
Run Code Online (Sandbox Code Playgroud)

c# sinatra nancy

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

Git相当于`hg cp`

我的任务是将一个非常大的文件(已经提交)拆分/解压缩成许多较小的文件.使用Hg我会将提取的文件添加为现有大文件(hg cphg cp -A)的副本,这样当我将我的分支合并到master时,在我工作时对大文件所做的其他更改将在我的extracte文件中被跟踪/冲突.

Git中有等价的吗?

git

3
推荐指数
1
解决办法
227
查看次数