我正在使用的软件需要能够在短时间内使用TCP/IP连接到许多服务器.该软件在Win32下运行.如果服务器没有响应,我希望能够快速继续列表中的下一个服务器.
有时当远程服务器没有响应时,我在大约20秒后收到连接超时错误.超时通常会更快.
我的问题是,这20秒会损害我的软件性能,我希望我的软件能够更快地放弃(比如5秒后).我假设Windows中的TCP/IP堆栈(?)会根据某些参数自动调整超时?
在我的应用程序中覆盖此超时是否合理,如果我在X秒内无法连接,请关闭套接字?
(它可能不相关,但应用程序是使用C++构建的,并使用I/O完成端口进行异步网络通信)
我试图了解调用 Parallel.For 时 MaxDegreeOfParallelism 实际上如何影响并行性。这是我正在试验的代码:
static void Main(string[] args)
{
var parallelOptions = new ParallelOptions()
{
MaxDegreeOfParallelism = 1000,
};
Parallel.For(1, 1000, parallelOptions, i =>
{
Console.WriteLine(i);
Thread.Sleep(TimeSpan.FromHours(1));
});
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我立即看到控制台输出 1 到 9(大约 0.1 秒内)。然后每秒都会添加一个新数字 - 10、11、12 等等。同时,在 Windows 任务管理器中,我看到进程中执行线程的数量随着每秒一个新线程的增加而增加。
使用这段代码,为什么我不能立即看到值 1 到 1000 的输出?
(我意识到这段代码可能毫无意义,并且在我的笔记本电脑上启动 1000 个线程可能是一个坏主意,但我想了解这里发生了什么)
编辑:在我看来,这个问题被错误地标记为重复。据我所知,MaxDegreeOfParallelism 是最大并行度。当然,如果我有 1000 个线程同时运行,就会有大量的上下文切换,但链接的问题并没有解释它实际上是如何工作的。如果我只想运行更合理数量的线程(例如 32 个)怎么办?我的计算机能够很好地处理这个问题,但是由于并行的行为,如上所述,需要约 20 秒才能启动该数量的线程。
我正在使用Owin来托管WebAPI控制器.我有Owin中间件,它执行身份验证并在身份验证失败时设置以下内容:
context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
Run Code Online (Sandbox Code Playgroud)
当发生这种情况时,我想显示一个HTML页面,其中包含对用户的一些说明.(比如,"你需要登录.")
目前我只是将用户重定向到accessdenied.html页面,但我更希望在没有用户被重定向的情况下直接显示访问被拒绝(我不希望Web浏览器中的Location字段改变) .
我假设我可以动态生成HTML并将其添加到响应中,例如通过从资源中读取HTML内容.
我的问题是:是否可以使用配置自动显示自定义访问被拒绝错误页面?在"traditioinal"ASP.NET中,可以在web.config中设置customErrors,但这似乎不适用于Owin selfhost:
<customErrors>
<error statusCode="401" redirect="~/accessdenied.html"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud) 由于我遇到的一些问题,我正在尝试使用.NET Framework 4中的连接池.使用SQL事件探查器,我可以看到每次从连接池中获取连接时,都会执行存储过程sp_reset_connection.
要摆脱这种重置(我实际上不需要sp_reset_connection).我已经尝试将连接字符串中的连接重置参数设置为false,但这似乎没有任何效果.我在想,也许我误解了Connection reset参数的用途.
我注意到http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx中没有记录Connection reset参数.但它在许多其他地方也有提及,例如http://www.techrepublic.com/article/educate-yourself-about-net-sql-server-connection-string-syntax/6084879.
如果我将Conection Reset标志设置为无效值(例如'hello'),则在打开连接时会出现异常,表明实际使用了连接重置标志.
ADO.NET是否真的关心连接重置标志?
我的代码如下:
static void Main(string[] args)
{
const string connectionString =
"Data Source=(local);Initial Catalog=MyDatabse;User ID=sa;Password=<removed>;Connection Timeout=5;Pooling=true;Min Pool Size=1; Max Pool Size=1; Enlist=false; Connection Reset=false;";
var connections = new List<SqlConnection>();
for (int i = 0; i < 1000000; i++)
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand command = new SqlCommand("SELECT * FROM DatabaseVersion", conn);
command.ExecuteNonQuery();
connections.Add(conn);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图了解货币格式在.NET框架中的工作原理.据我了解,Thread.CurrentCulture.NumberFormatInfo.CurrencySymbol包含本地文化的货币符号.
但正如我所看到的,在现实世界中,特定文化与货币符号之间并没有明确的一对一关系.例如,我可能位于英国,但我用欧元计算我的发票.或者我可能住在冰岛,并以美元收到美国供应商的发票.或者我可能住在瑞典,但我的银行账户使用欧元.我意识到,在某些情况下,您可能只想假设本地货币是要使用的货币,但通常情况并非如此.
在这些情况下,我是否会克隆CultureInfo并在克隆上手动设置货币符号,然后在格式化金额时使用克隆?即使货币符号无效,我认为使用NumberFormatInfo的其他属性仍然有意义,例如CurrencyDecimalSeparator.
我想一次构建一个Angular 5应用,然后将其发布到其他地址,例如:
默认情况下,Angular将假定所有文件都托管在/中,因此当我访问index.html时,它将加载脚本https://sub1.example.com/vendor.bundle.js之类的脚本,该脚本将显示404,因为它已部署到/ myapp1 / vendor.bundle.js(为了使它稍微复杂一点,我实际上是从单独域中的CDN加载文件,但我认为这不会影响该问题):
Angular 5允许我运行:
ng build --deploy-url "https://example.com/myapp1"
Run Code Online (Sandbox Code Playgroud)
这将修改inline.bundle.js并设置以下内容:
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "https://example.com/myapp1";
Run Code Online (Sandbox Code Playgroud)
反过来,这将确保从正确的路径加载脚本。
但是,这是一个编译时开关,我想在部署时或运行时进行配置。
我阅读了各种建议,例如:
我当前的解决方法是在部署时更新变量__webpack_require __。p,但这极易出错,因为此时此变量被最小化为“ np”之类,并且依赖于内部实现细节。
这样做的正确方法是什么?
据我了解,JavaScript 库 lodash 受到 underscore.js 的启发,并实现了类似的 API。根据维基百科,它是 underscore.js 的一个分支。
在我的应用程序中,我使用最新版本的 Lodash (4.17.21)。我使用的一些安全软件标记出此版本的 Lodash 捆绑了旧版本的 underscore.js,其中包含安全问题。
在 GitHub 中,我可以在 Lodash 存储库的以下子文件夹中找到旧版本的 Underscore.js: https: //github.com/lodash/lodash/tree/4.17/vendor/underscore
我已经 grep 了源代码,我的印象是 Lodash 捆绑 underscore.js 只是作为参考和某种测试。当我查看 Lodash/Underscore 实现的特定函数时,发现它们的实现是完全独立的。
有谁知道为什么 Lodash github 帐户还包含 Underscore 的副本吗?
c# ×3
.net ×1
ado.net ×1
angular ×1
c++ ×1
currency ×1
deployment ×1
formatting ×1
javascript ×1
lodash ×1
owin ×1
scheduling ×1
sockets ×1
sql-server ×1
tcp ×1
timeout ×1
url ×1
windows ×1