小编Hen*_*tov的帖子

Typescript"无法分配给属性,因为它是常量或只读",即使属性未标记为只读

我有以下代码

type SetupProps = {
    defaults: string;
}

export class Setup extends React.Component<SetupProps, SetupState> {
    constructor(props: any) {
        super(props);
        this.props.defaults = "Whatever";
}
Run Code Online (Sandbox Code Playgroud)

尝试运行此代码时,TS编译器返回以下错误:

无法分配为"默认值",因为它是常量或只读属性.

如何是deafualts一个只读属性,当它显然没有标记这个样子.

javascript readonly typescript reactjs

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

优化从表达式树生成的Func.Invoke()

我正在研究动态实例化类的自动化.

我决定写一个表达式树,它会生成一个Func,可以为我实例化我的类.但是,我注意到我的性能降低了3倍Func,而不是简单地使用new.

根据我对表达树和调用函数的了解,性能差异应该几乎不存在(可能是20-30%,但远不及慢3倍)

首先,这是我正在构建的表达式

public Expression<Func<A1, T>> BuildLambda<T, A1>(string param1Name)
    {
        var createdType = typeof(T);

        var param = Expression.Parameter(typeof(A1), param1Name);
        var ctor = Expression.New(createdType);
        var prop = createdType.GetProperty(param1Name);

        var displayValueAssignment = Expression.Bind(prop, param);
        var memberInit = Expression.MemberInit(ctor, displayValueAssignment);

        return
            Expression.Lambda<Func<A1, T>>(memberInit, param);
    }
Run Code Online (Sandbox Code Playgroud)

然后我继续编译它(我只做一次)

var c1 = mapper.BuildLambda<Class1, int>("Id").Compile();
Run Code Online (Sandbox Code Playgroud)

然后我像这样调用我的Func

var result = c1.Invoke(5);
Run Code Online (Sandbox Code Playgroud)

当我把这最后一部分放在一个循环中并将它与类似的东西进行比较时

var result = new Class1() { Id = 5 };
Run Code Online (Sandbox Code Playgroud)

我做了几个测试,比较两者的性能,这就是我最终得到的结果:

100,000    Iterations - new: 0ms.   | Func 2ms. …
Run Code Online (Sandbox Code Playgroud)

c# performance func expression-trees

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

ASP.NET Core MVC 慢响应生成

我有一个 ASP.NET Core MVC Web 应用程序,它有一个端点,它将一些数据作为 json 返回。唯一的问题是我的数据大约是 5 MB 的原始(非识别)JSON,并且响应需要很长时间。

我设置了一些指标,发现我的应用程序的处理平均需要大约 30 毫秒。然而整个响应在超过 250ms后返回。

我正在使用在我的机器上运行的应用程序的本地实例进行测试,并使用邮递员发送获取请求,因此网络延迟最小。

这是我的控制器的样子

    [HttpGet("getData")]
    public IActionResult GetData()
    {
        Stopwatch sw = Stopwatch.StartNew();
        long a, b, c;

        var data = this._cacheInternal.GetValidDataSet();
        a = sw.ElapsedMilliseconds;

        sw.Restart();
        var processedData = this.ProcessData(data, false);
        b = sw.ElapsedMilliseconds;

        sw.Restart();
        var serialized = JsonConvert.SerializeObject(processedData);
        c = sw.ElapsedMilliseconds;

        this._log.Info($"Data: {a} ms. Processing {b} ms. Serialization {c} ms.");

        return this.Ok(serialized);
    }
Run Code Online (Sandbox Code Playgroud)

这是我在检查 AspNetCore 日志时发现的内容。

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/api/status/getData …
Run Code Online (Sandbox Code Playgroud)

c# asp.net web-applications http asp.net-core-mvc

8
推荐指数
0
解决办法
3907
查看次数

.NET转到NuGet包的实现

是任何人都知道的方法/工具,使我的浏览执行(由具有原始的方法/类型来自于NuGet包的PDBSURL的让他们在哪里)。

我知道SourceLink,实际上我正在使用它。但是,源链接是调试器功能,允许它在调试时下载源代码。我需要能够在不调试的情况下浏览源代码。(以某种方法打F12表示)。

奇怪的是,SourceLink下载了原始源的副本,因此我只需要链接Visual Studio即可指向源文件。

我尝试使用dotPeekJetBrains的,但我只manged得到它的工作作为一个符号服务器,这又是有益的-但只有在调试。

.net c# debugging symbols visual-studio

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

Typescript 创建一个类型,其属性是接口的属性

我有一个接口定义如下

export interface RoutingMap {
    ticket: {
        id: number
    },
    car: {
        model: string,
        make: number
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够为一个对象创建一个接口,该对象有 2 个属性 - 1 是 中的键RoutingMap,另一个是Key中的任何类型RoutingMap

在伪代码中我想象它看起来像这样

export interface RoutingMessage {
    resource: keyof RoutingMap,
    params: RoutingMap["resource"]
}
Run Code Online (Sandbox Code Playgroud)

我的最终目标是能够构建这样的对象

const msg: RoutingMessage = {
    resource: "ticket",
    params: { id: 10 }
}

const invalidMsg: RoutingMessage = {
    resource: "something", //TS error - "something" is not a key of routing map
    params: { id: 10 }
} …
Run Code Online (Sandbox Code Playgroud)

javascript types typescript typescript-generics

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