小编Onu*_*mus的帖子

Web API中间的可选参数

我有以下路由映射或WEB API

[Route("Foo/Id/{id=1}/bar")]
Run Code Online (Sandbox Code Playgroud)

我想让Id可选如上所述但是从客户端无论我称之为路线不匹配我得到404我试试像

Foo/Id//bar
Run Code Online (Sandbox Code Playgroud)

但是不起作用.如果参数不在最后,是否可以使用web api的可选参数?

routing asp.net-web-api asp.net-web-api2

8
推荐指数
1
解决办法
1672
查看次数

在F#中不允许写入结构记录的可变属性.为什么?

当我有以下代码时:

[<Struct>]
type Person = { mutable FirstName:string ; LastName : string}

let john = { FirstName = "John"; LastName = "Connor"}

john.FirstName <- "Sarah";
Run Code Online (Sandbox Code Playgroud)

编译器抱怨"一个值必须是可变的才能改变内容".但是,当我删除Struct属性时,它工作正常.为什么会这样 ?

f#

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

带有对象表达式的 F# 多个接口实现

根据文档,您可以使用对象表达式实现多个接口。但是如果你看到下面的代码:


// Define two interfaces
type IFirst =
  abstract F : unit -> unit
  abstract G : unit -> unit

type ISecond =
  abstract H : unit -> unit
  abstract J : unit -> unit

// This object expression implements both interfaces.
let implementer : IFirst =
    { new ISecond with
        member this.H() = ()
        member this.J() = ()
      interface IFirst with
        member this.F() = ()
        member this.G() = () }
Run Code Online (Sandbox Code Playgroud)

所以强制转换IFirst会导致编译器错误。为什么呢?

f#

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

从C#消耗F#异步

假设我有以下代码:

namespace Library1

open System.Threading.Tasks
open System.Threading
open System.Runtime.Remoting.Messaging
open System

type public Class1() =

    let printThread (message) = 
        printfn "%s %A" message Thread.CurrentThread.ManagedThreadId

    let bar = 
        printThread ("first bar")
        async { 
            printThread ("first async")
            do! Async.Sleep(1000)
            printThread "last async"
        }

    member this.X() =  bar
Run Code Online (Sandbox Code Playgroud)

我想使用此类并从C#调用X。问题是X返回Async <'T>。但是,公开F#特定类型是不好的做法。因此,最佳实践是返回任务。但是Async.StartAsTask有点问题,因为它将导致代码在单独的线程中运行。我想要的是我想返回一个Task,但它也应该表现为Async.StartImmediate。因此,代码的非异步部分应在原始主线程中运行。在这里,我假设我从UI线程运行它,以便所有调用都将返回相同的线程ID。换句话说,我想要一个Async.StartImmediate但返回一个任务。这可以实现吗?

f# async-await

6
推荐指数
1
解决办法
595
查看次数

在64位下执行缓慢.可能的RyuJIT错误?

我有以下C#代码尝试在发布模式下进行基准测试:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication54
{
class Program
{
    static void Main(string[] args)
    {
        int counter = 0;
        var sw = new Stopwatch();
        unchecked
        {
            int sum = 0;
            while (true)
            {
                try
                {
                    if (counter > 20)
                        throw new Exception("exception");
                }
                catch
                {
                }

                sw.Restart();
                for (int i = 0; i < int.MaxValue; i++)
                {
                    sum += i;
                }
                counter++;
                Console.WriteLine(sw.Elapsed);
            }

        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我在64位机器上安装了VS 2015.当我在32位下运行代码时,它每次迭代运行大约0.6秒 …

c# clr performance ryujit visual-studio-2015

6
推荐指数
1
解决办法
221
查看次数

在 .NET Core 和 Visual Studio Code 中调试用 F# 编写的 xunit 测试?

我正在尝试调试用 F# 编写的 xunit 测试。我在 .NET Core 上并在 Windows 平台上使用 Visual Studio Code。这可能吗?PS 我知道关于此事还有另一个问题,但在这种情况下,它是特定于 F# 的。

debugging f# .net-core visual-studio-code

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

关于缓存未命中的 x86 超线程说明

如果我对 x86 cpu 的理解正确,超线程是有益的,尤其是当我们有 IO 调用时,这样当阻塞线程空闲时,另一个线程可以廉价地在同一个 CPU 上工作。我的问题是缓存未命中是否也会发生同样的事情。那么在等待数百个周期从主内存中获取数据的同时,其他线程可以在同一个物理 CPU 上执行一些代码吗?

cpu multithreading cpu-architecture hyperthreading

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

为什么和在何处 align 16 用于指令的 SSE 对齐?

我正在阅读 Apress 的现代 x86 汇编语言书籍。对于编程 64 位 SSE 示例,作者将align 16放在代码中的特定点上。例如

    .code
ImageUint8ToFloat_ proc frame
_CreateFrame U2F_,0,64               ; helper macros to create prolog
_SaveXmmRegs xmm10,xmm11,xmm12,xmm13 ; helper macros to create prolog

_EndProlog  ; helper macros to create prolog

...

shrd r8d,
pxor xmm5,xmm5

align 16  ; Why this is here ?
@@:
movdqa xmm0,xmmword ptr [rdx]
movdqa xmm10,xmmword ptr [rdx+16]

movdqa xmm2,xmm0
punpcklbw xmm0,xmm5
punpckhbw xmm2,xmm5
movdqa xmm1,xmm0
movdqa xmm3,xmm2

...
Run Code Online (Sandbox Code Playgroud)

作者解释说有必要放置align 16,因为我们使用的是 SSE,以便指令本身对齐。没关系。我的问题是为什么作者选择将align 16放在该特定位置。作为程序员,我应该如何决定 …

64-bit assembly sse

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

为什么,F#中的Lazy纯函数堆栈比非惰性堆栈慢?

我已经比较了懒惰堆栈和非惰性堆栈实现:http://en.wikibooks.org/wiki/F_Sharp_Programming/Advanced_Data_Structures#Lazy_Data_Structures

在本文中它说,append函数对于惰性函数是O(1)而对于非惰性函数是O(n).但是在程序下面运行表明,懒惰堆栈的速度是非懒惰堆栈的两倍.可能是什么原因造成的?

type lazyStack<'a> = 
    | Node of // return an integer exit code
              Lazy<'a * 'a lazyStack>
    | EmptyStack

module LazyStack = 
    let (|Consx|Nil|) = 
        function 
        | Node(item) -> 
            let hd, tl = item.Force()
            Consx(hd, tl)
        | EmptyStack -> 
            Nil

    let hd = 
        function 
        | Consx(hd, tl) -> hd
        | Nil -> failwith "empty"

    let tl = 
        function 
        | Consx(hd, tl) -> tl
        | Nil -> failwith "empty"

    let cons (hd, tl) = Node(lazy (hd, tl)) …
Run Code Online (Sandbox Code Playgroud)

f# functional-programming lazy-evaluation

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