我有以下代码
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
一个只读属性,当它显然没有标记这个样子.
我正在研究动态实例化类的自动化.
我决定写一个表达式树,它会生成一个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) 我有一个 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)
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) 是任何人都知道的方法/工具,使我的浏览执行(由具有原始的方法/类型来自于NuGet包的PDBS或URL的让他们在哪里)。
我知道SourceLink,实际上我正在使用它。但是,源链接是调试器功能,允许它在调试时下载源代码。我需要能够在不调试的情况下浏览源代码。(以某种方法打F12表示)。
奇怪的是,SourceLink下载了原始源的副本,因此我只需要链接Visual Studio即可指向源文件。
我尝试使用dotPeek从JetBrains的,但我只manged得到它的工作作为一个符号服务器,这又是有益的-但只有在调试。
我有一个接口定义如下
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) c# ×3
javascript ×2
typescript ×2
.net ×1
asp.net ×1
debugging ×1
func ×1
http ×1
performance ×1
reactjs ×1
readonly ×1
symbols ×1
types ×1