在回答这个问题(/sf/ask/24662221/#352327)时,它让我想知道......
将静态类视为等效于实现单例模式的非静态类实例是否存在任何危险?
我使用实现IHttpAsyncHandler的通用处理程序遇到了一些性能问题.最简单的是,处理程序接收GET请求,20秒后在响应中写入"<timeout />"后结束响应.
当使用10000-20000个并发请求锤击.ashx时,在准确的5000个请求之后,503服务器不可用.切换到同步模式并立即结束请求时,问题就消失了.
我已经修改了许多设置,但我唯一能够实现的是降低发生此错误的请求阈值.
这是我玩过的设置的简要说明:
machine.config中:
<configuration>
...
<system.web>
...
<processModel enable="true" requestQueueLimit="10000"/>
...
Run Code Online (Sandbox Code Playgroud)
web.config中:
<configuration>
...
<system.web>
...
<httpRuntime enable="true" appRequestQueueLimit="10000"/>
...
Run Code Online (Sandbox Code Playgroud)
IIS管理器> ApplicationPools>高级设置
Queue Length : 65535
Run Code Online (Sandbox Code Playgroud)
虽然我不能确定,但是如果请求是同步的,那么这些设置似乎工作正常,但是当异步时,在服务器开始告诉我离开之前,我似乎无法超越5000个请求.如果我把事情设置得更低(不能确切地记住上面的设置,但我已经尝试了所有设置),那么503计数会相应地上升,但是当负载严重时我永远不能阻止它超过5000 .
似乎有很多设置分散在无数的地方可能会影响到这一点,但5000似乎相当固定.我在这里看到appRequestQueueLimit不能超过5000,但是找不到关于此的更多信息,并想知道这是否是错误的信息.
IIS中是否存在任何类型的"泛滥控制"设置,可能会将单个主机限制为不超过5000个请求?如何让IIS处理更多5000个并发异步请求?
编辑2:是否有任何计数器或其他指标可能超出限制,我将如何进一步调查?
编辑:这是loadgenerator代码:
using System;
using System.Net;
using System.Threading;
namespace HammerTime
{
class Program
{
private static int counter = 0;
static void Main(string[] args)
{
var limit = 5000;
ServicePointManager.DefaultConnectionLimit=limit;
for (int i = 0; i < limit;++i )
{
StartWebRequest(i.ToString());
}
Console.ReadLine();
}
private …Run Code Online (Sandbox Code Playgroud) 我的声明看起来像这样:
MERGE INTO someTable st
USING
(
SELECT id,field1,field2,etc FROM otherTable
) ot on st.field1=ot.field1
WHEN NOT MATCHED THEN
INSERT (field1,field2,etc)
VALUES (ot.field1,ot.field2,ot.etc)
Run Code Online (Sandbox Code Playgroud)
其中otherTable有一个自动递增ID字段.
我想插入someTable为处于相同的顺序ID的字段otherTable,使得顺序的ID被插入非字段匹配时,s的保留.
快速查看文档似乎表明没有功能可以支持这一点.
这是可能的,还是有另一种方法可以完成符合我要求的插入?
编辑:一种方法是向someTable添加一个捕获排序的附加字段.如果可能的话,我宁愿不这样做.
...经过反思,上面的方法似乎是要走的路.
这个问题可能突出了我对网络主体缺乏了解,而不是编程问题.
我在使用主机名进行查找
Dns.GetHostEntry
Run Code Online (Sandbox Code Playgroud)
这会向我返回一个IPHostEntry,它有一个AddressList属性,它是一个IPAddress数组.
我一直认为主机名和IP之间存在1对1的映射,但我发现在某些情况下我会找回同一主机的几个IPAddress.
这对我来说是一个惊喜.
我不明白哪个域名解析部分?
我已经困惑了几天......随意拍下我的任何假设.
我们正在使用带整数键的字典.我假设在这种情况下密钥的值直接用作哈希.这是否意味着(如果密钥分组在一个小范围内)密钥哈希的分布(与密钥本身相同,对吗?)将处于类似的小范围内,因此哈希表的选择不好?
是否更好的是提供一个IEqualityComparer,用素数和模数学做一些聪明的东西来计算更好的分布式哈希?
我正在编写将产生两个线程的代码,然后等待它们使用CyclicBarrier类进行同步.问题是循环障碍没有按预期工作,主线程不等待各个线程完成.以下是我的代码的外观:
class mythread extends Thread{
CyclicBarrier barrier;
public mythread(CyclicBarrier barrier) {
this.barrier = barrier;
}
public void run(){
barrier.await();
}
}
class MainClass{
public void spawnAndWait(){
CyclicBarrier barrier = new CyclicBarrier(2);
mythread thread1 = new mythread(barrier).start();
mythread thread2 = new mythread(barrier).start();
System.out.println("Should wait till both threads finish executing before printing this");
}
}
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?或者有更好的方法来编写这些屏障同步方法吗?请帮忙.
经过大量测量后,我发现了一个我想要优化的Windows服务中的热点.我们正在处理可能有多个连续空格的字符串,我们希望减少到只有一个空格.我们使用静态编译的正则表达式来执行此任务:
private static readonly Regex
regex_select_all_multiple_whitespace_chars =
new Regex(@"\s+",RegexOptions.Compiled);
Run Code Online (Sandbox Code Playgroud)
然后按如下方式使用它:
var cleanString=
regex_select_all_multiple_whitespace_chars.Replace(dirtyString.Trim(), " ");
Run Code Online (Sandbox Code Playgroud)
这条线被调用了数百万次,并且被证明是相当密集的.我试着写一些更好的东西,但我很难过.鉴于正则表达式的处理要求相当适中,肯定会有更快的速度.可以unsafe用指针速度的东西进一步处理?
编辑:
感谢对这个问题的惊人反应......最让人意想不到的!
我们收集了大量字符串并将它们以xml片段发送给我们的客户端.这些字符串可以包含任何字符.我们一直在看到因尝试序列化包含"坏"字符的XElement实例而导致的错误.这是一个例子:
var message = new XElement("song");
char c = (char)0x1a; //sub
var someData = string.Format("some{0}stuff", c);
var attr = new XAttribute("someAttr", someData);
message.Add(attr);
string msgStr = message.ToString(SaveOptions.DisableFormatting); //exception here
Run Code Online (Sandbox Code Playgroud)
上面的代码在指定的行生成异常.这是堆栈跟踪:
'SUB', hexadecimal value 0x1A, is an invalid character. System.ArgumentException System.ArgumentException: '', hexadecimal value 0x1A, is an invalid character. at System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(Int32 ch, Char* pDst, Boolean entitize) at System.Xml.XmlEncodedRawTextWriter.WriteAttributeTextBlock(Char* pSrc, Char* pSrcEnd) at System.Xml.XmlEncodedRawTextWriter.WriteString(String text) at System.Xml.XmlWellFormedWriter.WriteString(String text) at System.Xml.XmlWriter.WriteAttributeString(String prefix, String localName, String ns, String value) at System.Xml.Linq.ElementWriter.WriteStartElement(XElement e) at System.Xml.Linq.ElementWriter.WriteElement(XElement …
这更多地出于好奇而不是任何现实世界的问题.
请考虑以下代码:
void Main()
{
FAsync().Wait();
}
async Task FAsync()
{
await Task.Yield();
await FAsync();
}
Run Code Online (Sandbox Code Playgroud)
在同步世界中,这最终会导致堆栈溢出.
在异步世界中,这只会消耗大量内存(我认为这与我可能松散地称之为"异步堆栈"的内容有关?)
这些数据到底是什么,以及如何保存?
请考虑以下简单的HTML和CSS
a.rel{
position:relative;
}
button{
position:absolute;
top:0;
left:0;
}Run Code Online (Sandbox Code Playgroud)
Lorem ipsum dolor sit amet
<a class="rel" href="https://www.google.co.uk">
<img src=
"https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png">
<button>I'm a button</button>
</a>Run Code Online (Sandbox Code Playgroud)
现在考虑CSS2 10.1.4.1
如果元素具有'position:absolute',则包含块由最近的祖先建立,其中'position'为'absolute','relative'或'fixed',方式如下:
- 在祖先是内联元素的情况下,包含块是围绕为该元素生成的第一个和最后一个内联框的填充框周围的边界框.在CSS 2.1中,如果内联元素被分割为多行,则包含的块是未定义的.
如果元素具有position:absolute,则包含块由最近的祖先建立,其位置不是static,其方式如下:
在祖先是内联级别的情况下,包含块取决于祖先的方向属性:
- 如果方向是ltr,则包含块的顶部和左侧是祖先生成的第一个框的顶部和左侧内容边缘,而底部和右侧是祖先的最后一个框的底部和右侧内容边缘.
这是不是意味着按钮应该出现在左上方的图像顶部?当按钮出现在图像下方时,我无法理解规范的哪一部分?
c# ×6
string ×2
ashx ×1
asp.net ×1
async-await ×1
callstack ×1
concurrency ×1
css ×1
css-position ×1
dictionary ×1
dns ×1
hash ×1
html ×1
iis-7 ×1
java ×1
memory ×1
merge ×1
networking ×1
optimization ×1
recursion ×1
regex ×1
singleton ×1
sql ×1
sql-server ×1
static ×1
t-sql ×1
xelement ×1