我的业务逻辑是用静态方法在简单的静态类中实现的.这些方法中的每一个在调用时打开/关闭SQL连接:
public static void DoSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为避免打开和关闭连接可以节省性能.我以前用OleDbConnection类做了一些测试(不确定SqlConnection),它肯定有助于像这样工作(据我记得):
//pass the connection object into the method
public static void DoSomething(string something, SqlConnection connection)
{
bool openConn = (connection.State == ConnectionState.Open);
if (!openConn)
{
connection.Open();
}
// ....
if (openConn)
{
connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是 - 我应该选择方法(a)还是方法(b)?我读了另一个stackoverflow问题,连接池为我保存了性能,我根本不用费心......
PS.它是一个ASP.NET应用程序 - 仅在Web请求期间存在连接.不是win-app或服务.
我需要将HTML字符串转换为纯文本(最好使用HTML Agility包).适当的白色空间,特别是正确的换行符.
通过"正确的换行符"我的意思是这段代码:
<div>
<div>
<div>
line1
</div>
</div>
</div>
<div>line2</div>
Run Code Online (Sandbox Code Playgroud)
应转换为
line1
line2
Run Code Online (Sandbox Code Playgroud)
即只有一个换行符.
我见过的大多数解决方案只是简单地将所有<div> <br> <p>标签转换为\ns*cks.
有关C#的html到plaintext渲染逻辑的任何建议吗?不完整的代码,至少常见的逻辑答案,如"用换行符替换所有关闭的DIV,但只有当下一个兄弟也不是DIV"时才真正有用.
我试过的事情:简单地获取.InnerText属性(显然是错误的),正则表达式(缓慢,痛苦,大量黑客,还有正则表达式比HtmlAgilityPack慢12倍 - 我测量了它),此解决方案和类似(返回更多换行符然后需要)
我是否必须像下面那样优化我的FOR循环,否则编译器会为我做这个?
//this is slow, right?
for (int i = 0; i < menuItem.DropDownItems.Count; i++)
{
...
}
//this should be much faster right?
for (int i = 0, count = menuItem.DropDownItems.Count; i < count; i++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
PS.我打赌这已经发布但我没有找到任何东西,抱歉可能有重复.
PPS.对不起,我编写了很多JavaScript代码 - 我们必须考虑这些优化......在.net-world中可能看起来很荒谬.
我正在尝试为我的回复添加"max-age"标题.它在我的Visual Studio开发服务器上工作正常,但只要我将应用程序移动到IIS(尝试本地IIS表达和服务器上的IIS) - 标题就会消失.
我的代码:
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetMaxAge(new TimeSpan(1, 0, 0, 0));
Run Code Online (Sandbox Code Playgroud)
VS Dev服务器响应(一切正常):
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 07 Jan 2011 14:55:04 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: public, max-age=86400
Run Code Online (Sandbox Code Playgroud)
IIS7响应
HTTP/1.1 200 OK
Server: Microsoft-IIS/7.5
Date: Fri, 07 Jan 2011 15:00:54 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: public
Run Code Online (Sandbox Code Playgroud)
PS.它是一个ASHX处理程序,如果它很重要......
我需要在OSX中模拟击键.我是这样做的:
-(void)execute {
CGEventSourceRef sourceRef =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef keyPress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, true);
CGEventRef keyUnpress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, false);
CGEventSetFlags(keyPress, modifierFlags);
CGEventPost(kCGHIDEventTap, keyPress);
//unpressing the acualkey
CGEventPost(kCGHIDEventTap, keyUnpress);
CFRelease(keyPress);
CFRelease(keyUnpress);
CFRelease(sourceRef);
}
Run Code Online (Sandbox Code Playgroud)
它适用于任何应用程序中的每个热键或简单击键,但不适用于系统范围的快捷方式,例如option + space启动Spotlight或cmd + shift + 4制作屏幕截图或ctrl + `打开iTerm2窗口.
我试图改变事件的来源和发布事件的位置,但没有帮助.有任何想法吗?
我的代码隐藏(aspx.cs)中有以下代码:
protected void button1_Click(object sender, EventArgs e)
{
new Thread(delegate() {
try
{
Thread.Sleep(30000); //do nothing for 30 seconds
}
catch (Exception ex)
{
//I AWLAYS get a ThreadAbortException here
//in about 1 second WHY!?!??!
}
}).Start();
}
Run Code Online (Sandbox Code Playgroud)
ASP.NET会在请求结束时终止所有子线程吗?
PS.我预测很多"因为这不是最佳实践"的答案.我知道在Windows服务中运行东西的最佳实践等.我只是好奇为什么线程在这个特定的代码中被杀死,因为没有"Response.Redirect",没有"Response.End",没有池回收没有IIS重启等等(人们重复"ASP.NET中的后台线程是坏的"口头禅的典型原因).
更新:事实证明它在ASP.NET MVC中工作正常!线程仅在Web表单中中止!哪个更奇怪.有任何想法吗?
现在这很有趣!
我只是注意到我的MVC视图中的异常在堆栈跟踪中有行号!这意味着 - 我的观点是用PDB编译的.
我查看了服务器上的"Temporary ASP.NET Files"文件夹 - 是的,每个视图都有PDB文件.
我<compilation debug="false"/>在我的web.config中.
为什么会发生这种情况?如何禁用它?这是生产服务器,所以我想禁用pdb生成.
我检查了我的"web.config","Views/web.config","machine.config",默认"web.config" windir%\Microsoft.NET\Framework64\[version]\config\- 我想我还没有找到任何可疑的编译器选项...我在哪里看?
或者我只是浪费时间,这是无法更改的默认选项?
PS.更多信息,以防万一:这是一个MVC 4应用程序,视图是用Razor编写的.
我正在为Visual Studio开发我的第一个加载项,我们需要向解决方案资源管理器添加一个上下文菜单项,它只显示特定的文件类型(在我们的例子中是".resx").
我一直在谷歌搜索2天,无法找到任何教程或代码示例...只有非常基本的事情,如添加菜单项到VS"工具"菜单等.
我有一个ASP.NET MVC 4应用程序(.NET 4.5)和SIgnalR与基于表单的身份验证(通过IIS/IIS Express托管)工作正常
一旦我将应用程序更改为Windows集成身份验证(<authentication mode="Windows"/>在"web.config"中)它就会停止工作.
jquery.signalR-2.2.2.min.js:9 WebSocket连接
ws://localhost:51030/signalr/connect?transport=webSockets&blhablahblah失败:WebSocket握手期间出错:意外响应代码:403
将[Authorize]属性添加到我的集线器后,错误将更改为
WebSocket连接
ws://localhost:51030/signalr/connect?transport=webSocketsblahblah失败:HTTP身份验证失败; 没有有效的凭证
该应用程序的其他部分工作正常,在服务器和工作等启用Windows身份验证等.
我该如何解决这个问题?
如果它由于某种原因无法解决(可能是Chrome不支持在websocket连接上使用windows auth或其他东西) - 为什么它不回归到非websocket协议?以及如何强制退回?
更新:我创建了一个github问题https://github.com/SignalR/SignalR/issues/3953.问题不在于我无法连接.问题是我无法处理错误以回退到另一个传输.也.fail()没有.error()被调用.Try-catch也没有帮助.
我正在使用localhostSSL 测试 HTML5 通知。我已重置该网站的 Chrome 设置(通过单击 URL 框中的锁定图标 - “网站设置”),并仔细检查通知设置设置为“询问(默认)”。
现在这是我的代码:
if (Notification.permission !== "granted") {
Notification.requestPermission();
}
Run Code Online (Sandbox Code Playgroud)
但是,一旦运行代码,就不会显示任何权限弹出窗口,而是在地址栏中看到这个锁定图标,上面写着“通知被阻止”:
尝试.then()在代码中添加承诺 - 结果相同。使用 Chrome 版本 85.0.4183.102。他们改变了什么吗?
我确实看到博客文章提到,如果用户关闭弹出窗口三次,Chrome 会自动禁用通知,但我确实重置了设置,不是吗?
PS 如果我刷新页面并再次请求权限 - 我在控制台中看到这个 等等"Notifications permission has been blocked as the user has ignored the permission prompt several times.",如果我连提示都没有看到,我怎么能忽略它呢?
c# ×6
asp.net ×4
asp.net-mvc ×1
cocoa ×1
for-loop ×1
iis ×1
javascript ×1
macos ×1
ntlm ×1
optimization ×1
signalr ×1
websocket ×1