小编Ale*_*lex的帖子

"打开/关闭"SqlConnection还是保持打开状态?

我的业务逻辑是用静态方法在简单的静态类中实现的.这些方法中的每一个在调用时打开/关闭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或服务.

c# sqlconnection

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

使用正确的换行符将HTML转换(渲染)为Text

我需要将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倍 - 我测量了它),此解决方案和类似(返回更多换行符然后需要)

c# html-agility-pack

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

for-loop optimization - 需要与否?

我是否必须像下面那样优化我的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中可能看起来很荒谬.

c# optimization for-loop

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

Cache.SetMaxAge不能在IIS下工作,在VS Dev Srv下工作正常

我正在尝试为我的回复添加"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处理程序,如果它很重要......

c# asp.net iis browser-cache

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

模拟系统范围热键的按键

我需要在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窗口.

我试图改变事件的来源和发布事件的位置,但没有帮助.有任何想法吗?

macos cocoa

13
推荐指数
3
解决办法
8861
查看次数

为什么ASP.NET杀死我的后台线程?

我的代码隐藏(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表单中中止!哪个更奇怪.有任何想法吗?

c# asp.net multithreading

12
推荐指数
2
解决办法
7484
查看次数

为什么我的MVC视图是用PDB编译的?

现在这很有趣!

我只是注意到我的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编写的.

asp.net asp.net-mvc

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

Visual Studio加载项 - 向解决方案资源管理器添加上下文菜单项

我正在为Visual Studio开发我的第一个加载项,我们需要向解决方案资源管理器添加一个上下文菜单项,它只显示特定的文件类型(在我们的例子中是".resx").

我一直在谷歌搜索2天,无法找到任何教程或代码示例...只有非常基本的事情,如添加菜单项到VS"工具"菜单等.

c# visual-studio-addins visual-studio

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

SignalR无法与Windows集成的身份验证一起使用

我有一个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也没有帮助.

asp.net ntlm windows-authentication websocket signalr

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

Notification.requestPermissions - 不显示对话框,Chrome 中显示“自动阻止”消息

我正在使用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.",如果我连提示都没有看到,我怎么能忽略它呢?

javascript notifications google-chrome html5-notifications

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