我正在寻找 Web 应用程序的瓶颈,并发现 INSERT 查询的运行速度明显变慢,如下所示:
MariaDB [myforum]> insert into tag set tagtext='abc12345',dateline=unix_timestamp(),canonicaltagid=1234;
Query OK, 1 row affected (0.24 sec)
Run Code Online (Sandbox Code Playgroud)
这是通过将 安装mysql-client在应用程序容器中以进行测试来完成的。对于这样一个简单的查询,240 毫秒似乎很长。我假设了一些 dns/网络问题。但是在 MariaDB 容器中直接运行查询时,我看到了类似的结果,其中使用-h 127.0.0.1以下方法建立连接:
MariaDB [myforum]> insert into tag set tagtext='abc123',dateline=unix_timestamp(),canonicaltagid=1234;
Query OK, 1 row affected (0.251 sec)
Run Code Online (Sandbox Code Playgroud)
仅 INSERT 查询有效。SELECTs 和预期的一样快。奇怪的是,这似乎与 MariaDB Docker 安装有关:我在本地 XAMPP 安装上有相同的数据库,其中相同的查询速度很快:
MariaDB [myforum]> insert into tag set tagtext='abc123',dateline=unix_timestamp(),canonicaltagid=123;
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我只能对表格本身进行有限的更改,因为它们来自 vBulletin(旧的专有论坛 CMS)。
我想知道为什么这些简单的查询如此之慢?
在我的 ASP.NET MVC 5 应用程序中,我的所有模型都在命名空间中MyApp.Models。要在我的视图中使用模型,例如告诉视图他应该使用哪个模型@model UserLoginModel,我必须使用using MyApp.Models.
这没什么大不了的,但我更希望它在我的每个视图中自动包含这个命名空间,以避免在每个视图中进行冗余导入。我发现我的视图文件夹中的 web.config 文件似乎适合这项工作
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Optimization"/>
<add namespace="MyApp" />
<add namespace="MyApp.Models"/>
</namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)
但它不起作用。所有这些都是由 Visual Studio 预先生成的。我只<add namespace="MyApp.Models"/>为我的模型添加了。
在 SO 上,我发现了一个与我类似的问题,但提问者只说它应该Views/web.config在我尝试时使用该文件来工作,并且回答遵循他为 ASP.NET MVC 6 的新测试版指定的问题。但我正在使用MVC 5.1.2 无法完成这项工作,他无法在视图中不包含命名空间的情况下找到@using视图。
使用ASP.NET Core身份,我创建了一个新用户UserManager.CreateAsync()并将其分配给现有角色UserManager.AddToRoleAsync.这是有效的,因为用户和角色之间的实现存储在AspNetUserRoles数据库的表中.
但是当我使用UserManager(例如UserManager.FindByMail()方法)获取用户时,Role列表为空.我也尝试过IncludeEF 的功能:
var user = userManager.Users.Include(u => u.Roles).FirstOrDefault(u => u.Email == "test@test.de");
Run Code Online (Sandbox Code Playgroud)
这给了我n:m关联表的ID,因为我需要角色名称,所以它不是很有用.也不可能使用第二个查询加载它们,因为Roles身份用户的属性是只读的.我希望得到一个List<string>角色名称.找不到任何关于此的信息.
对我来说,唯一的解决方法似乎是向我的用户添加一个自定义属性,并用数据填充它们,我使用第二个查询获取数据.但那不是一个好的解决方案.不能相信ASP.NET Core Identity没有更好的方法来获取这些数据......
asp.net-identity asp.net-core-mvc asp.net-core asp.net-core-1.0
我使用此处描述的yo生成器模板生成一个ASP.NET Core应用程序,其中Angular2作为前端.但随机地,在更改css文件并保存它们(导致Webpack重新加载)后,我在客户端控制台中得到以下异常:
Uncaught ReferenceError: vendor_bd98b4ed288c6b156cc9 is not defined
at Object.<anonymous> (external "vendor_bd98b4e…":1)
at __webpack_require__ (bootstrap 4cd8e17…:659)
at fn (bootstrap 4cd8e17…:83)
at Object.module.exports (eventsource.js from dll-reference vendor_bd98b4e…:1)
at __webpack_require__ (bootstrap 4cd8e17…:659)
at fn (bootstrap 4cd8e17…:83)
at Object.<anonymous> (main-client.js?v=4atoLMuOmZwmyVdq2ky2bYoBjkmqmVnuPNSIFOD8Qjs:2625)
at __webpack_require__ (bootstrap 4cd8e17…:659)
at module.exports (bootstrap 4cd8e17…:708)
at bootstrap 4cd8e17…:708
Run Code Online (Sandbox Code Playgroud)
在dist/main-client.js文件中我找到了以下行:
module.exports = vendor_bd98b4ed288c6b156cc9;
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = (__webpack_require__(0))(0);
Run Code Online (Sandbox Code Playgroud)
当我删除整个wwwroot/dist文件夹并重建Webpack包时,错误就消失了.然后,随机字符串改变如下:
module.exports = vendor_9dc79ae12948ed5e4b95;
Run Code Online (Sandbox Code Playgroud)
似乎是某种缓存问题.是什么导致这个?
我正在使用Webpack 2.2.1版.
我将创建一个自定义的Visual Studio项目模板,以避免重复ASP.NET Core项目的常见配置任务的额外工作,例如添加带有MySQL支持的EntityFramework.所以我为此创建了一个新的示例项目,并使用Project> Export模板进行导出.
但是当我基于我的自定义模板创建一个新项目时,所有文件夹都喜欢Controllers或Views缺失.只wwwroot存在.我检查了.vstemplate文件,似乎正确地添加了文件夹
<Folder Name="wwwroot" TargetFolderName="wwwroot" />
<Folder Name="Controllers" TargetFolderName="Controllers">
Run Code Online (Sandbox Code Playgroud)
所以这对我来说是不可理解的,那wwwroot是创造的,但Controllers不是,因为他们使用完全相同的指令.
完整的VS模板文件:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
<Name>AspNetCoreMySQL</Name>
<Description>Test</Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>AspNetCoreMySQL</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
<Project TargetFileName="AspNetCoreMySQL.csproj" File="AspNetCoreMySQL.csproj" ReplaceParameters="true">
<Folder Name="Properties" TargetFolderName="Properties">
<ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem>
</Folder>
<Folder Name="wwwroot" TargetFolderName="wwwroot" />
<Folder Name="Controllers" TargetFolderName="Controllers">
<ProjectItem ReplaceParameters="true" TargetFileName="PageController.cs">PageController.cs</ProjectItem>
</Folder>
<ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="ScaffoldingReadMe.txt">ScaffoldingReadMe.txt</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem> …Run Code Online (Sandbox Code Playgroud) visual-studio visual-studio-templates asp.net-core visual-studio-2017
我想使用cyberduck在OneDrive上传加密备份以避免本地复制.有一个名为file.txtI 的本地文件Backups要从OneDrive根目录上传到文件夹中,我使用了以下命令:
duck --username <myUser> --password <myPassword> --upload onedrive://Backups .\file.txt
Transfer incomplete…
File not found. /. Please contact your web hosting service provider for assistance.
甚至不可能使用duck --username <myUser> --password <myPassword> --listonedrive://Backups命令获取目录内容.这也会导致File not found错误.
我完全按照文档,不知道为什么这不起作用.Cyberduck是用巧克力安装的,当前版本是Cyberduck 6.6.2 (28219)
我在控制器中有一个名为Index的Action.这可以像下面这样调用:
我有一个自定义属性,应设置为2.和3.,但不是1.所以我尝试了以下内容:
public ActionResult Index() {
return View();
}
[MyCustomAttribute]
public ActionResult Index(StatusEnum status) {
return View();
}
[MyCustomAttribute]
public ActionResult Index(DateTime date) {
return View();
}
Run Code Online (Sandbox Code Playgroud)
这似乎不可能,我总是得到一个错误,索引是模棱两可的.但我真的不明白为什么:动作有不同的参数,所以用参数区分它们应该没问题.
当我尝试这样的事情时,我得到了同样的错误:
public ActionResult Index() {
return View();
}
[MyCustomAttribute]
public ActionResult Index(StatusEnum status, DateTime date) {
return View();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它应该是真正清除的,没有问题来处理没有参数的所有请求到第一个Action而其余的请求到第二个Action.我觉得这很奇怪,因为在原生C#中,制作这样的重载绝对没有问题.
第二点:当重载是出于任何不可能的原因时,我该如何处理?排除没有参数的Index-Action(如果可能)是没有选项的,因为我也在其他控制器中使用该属性,并且应该处理所有Index-Actions.
我的 ASP.NET Core 应用程序一天到一天的调试速度非常慢。加载单个站点最多需要 90 秒,该站点在第一次请求前最多 5-6 秒加载。我没有做任何可以解释这一点的更改。我尝试了不同的方法来找出原因。似乎减速过程始于请求。
我发现只有当我将调试下的项目选项中的ENVIRONMENT变量设置为Development时才会出现这种情况。为了测试,我将它设置为生产,令人惊讶的是我的应用程序和这个问题之前一样快。我只能从检查变量的示例中找到预先生成的部分:
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
DebugData.InsertIfMissing(); // This is from me and inserts some testdata in the db
} else {
app.UseExceptionHandler("/Home/Error");
}
Run Code Online (Sandbox Code Playgroud)
但是,尽管我注释掉了这些行,但在设置 ENVIRONMENT=Development 时,我的 ASP.NET Core 应用程序仍然很慢。我不知道为什么。我只能用 ASP.NET Core、EF Core 或框架的其他部分在内部检查变量并在开发环境中做一些需要很多时间的事情的理论来解释这一点。
目前,使用生产环境是一种可接受的解决方法。但从长远来看,我想使用这个不错的变量来做一些只在开发中做的事情,比如用一些测试数据填充数据库。开发模式中出现此性能问题的原因是什么?
网络服务器的输出说:
Hosting environment: Development
Content root path: C:\Dev\MyApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method …Run Code Online (Sandbox Code Playgroud) c# asp.net-core-mvc visual-studio-2015 .net-core asp.net-core
在ASP.NET Core应用中,我有一个带有小部件的仪表板。每个小部件都有其自己的PartialViews,因此,可以通过以下方式生成整个页面:
-Layout.cshtml
--Dashboard.cshtml
--- Widget1.cshtml
--- Widget2.cshtml
根据快速页面加载时间的最佳做法,</body>在Layout.cshtml中的结束标记之前加载JavaScript 。之后,有一个自定义JS的部分,我通常用它来在页面加载时初始化对象。因此,本节如下所示:
<script asp-append-version="true" type="text/javascript" src="~/clientscript/page.min.js"></script>
@RenderSection("Js", required: false)
Run Code Online (Sandbox Code Playgroud)
在使用Layout.cshtml作为布局的视图(在此示例中,其Dashboard.cshtml)中,我可以定义一个部分,例如
@section Js {
// Js Code here
}
Run Code Online (Sandbox Code Playgroud)
在包含所有脚本文件的script标记之后呈现。因此,我可以确定,这里有jQuery或自定义类之类的所有依赖项。
但是我还需要在Widget1.cshtml之类的小部件中执行此操作。问题是:我在Dashboard.cshtml中加载PartialView Widget1.cshtml。在文档中写道,这是不可能的:
如果在局部视图中声明“剃刀”部分,则其父级将不可见;它将限于局部视图。
但这正是我所需要的。有没有办法解决此限制?不久,目标是将JavaScript从PartialView注入到LayoutView,并在它们之间插入常规View。
我知道的唯一方法是使用setInterval()并以低间隔(例如50ms)使用,并检查是否在循环中定义了jQuery或我的某些自定义类,直到它们被定义为止。它是一个JS解决方案。但这使得可以将脚本块直接包含在PartialView中,而无需使用各节。当您依赖jQuery之类的单个变量时,它非常适合。
但是我需要等待自定义类被加载。它们包含在jQuery之后。因此,waitForTypeLoaded(type, callback)不可能编写类似的泛型函数。这会使我总是写原始的setInterval()代码,这对我来说似乎不是一个明智的解决方案。
javascript jquery asp.net-core-mvc asp.net-core asp.net-core-1.0
我需要挂载一个 smb 共享才能访问 Ansible 中的大型共享安装文件。这使用 CLI 工作:
- name: Mount share
become: yes
shell: "mount.cifs {{ smb_share.path }} {{ smb_share.mount_point }} -o user={{ smb_share.user }},password={{ smb_share.password }},mfsymlinks,exec"
Run Code Online (Sandbox Code Playgroud)
但是,这有两个缺点:
mountmountAnsible 中有一个模块。但由于此共享仅用于安装并使用凭据,因此我不想永久安装它。该boot参数看起来是我需要的,遗憾的是不适用于 Linux:
Determines if the filesystem should be mounted on boot.
Only applies to Solaris systems.
Run Code Online (Sandbox Code Playgroud)
我仍然尝试设置,boot: no但如文档中所述,它仍然/etc/fstab使用纯文本密码创建一个条目。
是否有任何替代方法可以使用任何 Ansible 模块在 CentOS 7 上临时安装 Windows 共享?
asp.net-core ×4
asp.net ×2
javascript ×2
.net-core ×1
angular ×1
ansible ×1
asp.net-mvc ×1
c# ×1
centos ×1
cyberduck ×1
docker ×1
jquery ×1
mariadb ×1
mysql ×1
onedrive ×1
powershell ×1
razor ×1
smb ×1
ubuntu ×1
vbulletin ×1
webpack ×1
webpack-2 ×1
windows-10 ×1