我正在用node.js和asp.net-core编写的两个(有点)hello world项目进行快速压力测试.它们都在生产模式下运行,并且没有连接记录器.结果令人惊讶!即使在做了一些额外的工作之后,ASP.NET核心也优于node.js应用程序,而node.js应用程序只是渲染视图.
http://localhost:3000/nodejs node.js使用:node.js,express和vash渲染引擎.
此端点中的代码是
router.get('/', function(req, res, next) {
var vm = {
title: 'Express',
time: new Date()
}
res.render('index', vm);
});
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,除了通过time变量将当前日期发送到视图之外,它什么也没做.
http://localhost:5000/aspnet-core asp.net core使用:ASP.NET Core,默认模板定位dnxcore50
然而,这个应用程序不仅仅是渲染一个带有日期的页面.它生成5段各种随机文本.从理论上讲,这应该比nodejs app重一点.
这是呈现此页面的操作方法
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
[Route("aspnet-core")]
public IActionResult Index()
{
var sb = new StringBuilder(1024);
GenerateParagraphs(5, sb);
ViewData["Message"] = sb.ToString();
return View();
}
Run Code Online (Sandbox Code Playgroud)
运用 npm install -g recluster-cli && …
新引入的nameof运算符可以使我的代码成为"打字".
代替
return RedirectToAction("Edit");
Run Code Online (Sandbox Code Playgroud)
我们可以写
return RedirectToAction(nameof(Edit));
Run Code Online (Sandbox Code Playgroud)
但是要获得控制器的名称并不是那么简单,因为我们有一个Controller后缀.只是想知道我是否想要一个
return RedirectToAction(nameof(Index), controllernameof(Home));
Run Code Online (Sandbox Code Playgroud)
代替
return RedirectToAction("Index", "Home");
Run Code Online (Sandbox Code Playgroud)
我们如何实现controllernameof运营商?
这个ASP.NET Core 2.1项目在我的Mac OS上运行良好.但是,当我从Windows PC运行它时会抛出此异常.我试图使用相同版本的.NET Core SDK从两台Windows机器上运行它.
我尝试重新安装.NET Core SDK 2.1.302,也尝试升级到2.1.401.感谢任何帮助.
错误是
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.AspNetCore.Connections.Abstractions, Version=2.1.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)
在.csproj文件中使用Nuget包
<PackageReference Include="HangFire" Version="1.6.19" />
<PackageReference Include="Hangfire.LiteDB" Version="0.1.0" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.3.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.1" />
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.1.1" />
<PackageReference Include="LiteDB" Version="4.1.4" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.0" />
Run Code Online (Sandbox Code Playgroud)
完整堆栈跟踪
> dotnet run
Using launch settings from …Run Code Online (Sandbox Code Playgroud) 可能的解释在评论中
在SQL Server 2014企业版(64位)中 - 我试图从视图中读取.标准查询只包含一个ORDER BY和这样的OFFSET-FETCH子句.
方法1
SELECT
*
FROM Metadata
ORDER BY
AgeInHours ASC,
RankingPoint DESC,
PublishDate DESC
OFFSET 150000 ROWS
FETCH NEXT 40 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
但是,这个相当简单的查询比以下返回相同结果的查询执行快9倍(在跳过大量行(如150k)时显而易见).
在这种情况下,我首先读取主键,然后将其用作WHERE...IN函数的参数
方法2
SELECT
*
FROM Metadata
WHERE NewsId IN (
SELECT
NewsId
FROM Metadata
ORDER BY
AgeInHours ASC,
RankingPoint DESC,
PublishDate DESC
OFFSET 150000 ROWS
FETCH NEXT 40 ROWS ONLY
)
ORDER BY
AgeInHours ASC,
RankingPoint DESC,
PublishDate DESC
Run Code Online (Sandbox Code Playgroud)
这两个基准标记显示了这种差异
(40 row(s) …Run Code Online (Sandbox Code Playgroud) sql sql-server database-performance query-performance sql-server-2014
事实证明,该问题与
NLogASP.NET日志记录系统无关。日志配置正确,但是Debug由于配置错误,构建服务器正在将构建发布到生产中。
我试图在我的ASP.NET Core 2.0(SDK 2.1.401)项目中设置第三方记录器。到目前为止,我曾尝试Serilog和NLog。但是我对两个都有同样的问题。总结一下问题,
dotnet run(例如,在Development环境中)dotnet MyApplication.dll(即在Production环境中)却没有。"Logging"为Development环境部分定义任何内容appsettings.Development.json。下面描述的问题是针对的NLog。我尝试过SeriLog并遇到相同的问题。
这是来自的相关部分 Program.cs
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging((env, logging) =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog()
.Build();
Run Code Online (Sandbox Code Playgroud)
注意我已经清除了所有提供程序并添加NLog了nlog.config文件定义:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging((env, logging) =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
}) …Run Code Online (Sandbox Code Playgroud) c# ×3
asp.net-core ×2
.net-core ×1
asp.net-mvc ×1
logging ×1
nlog ×1
node.js ×1
performance ×1
serilog ×1
sql ×1
sql-server ×1