我正在寻找一种方法将不同行的字符串聚合成一行.我想在很多不同的地方做这个,所以有一个功能来促进这将是很好的.我尝试使用COALESCE和的解决方案FOR XML,但他们只是不为我削减它.
字符串聚合会执行以下操作:
id | Name Result: id | Names
-- - ---- -- - -----
1 | Matt 1 | Matt, Rocks
1 | Rocks 2 | Stylus
2 | Stylus
Run Code Online (Sandbox Code Playgroud)
我已经看过CLR定义的聚合函数作为替代COALESCE和FOR XML,但显然SQL Azure 不支持CLR定义的东西,这对我来说很痛苦因为我知道能够使用它会解决很多问题.我的问题.
是否有任何可能的解决方法,或类似的最佳方法(可能不如CLR那样最优,但嘿,我会采取我能得到的)我可以用来聚合我的东西?
很清楚为什么堆栈跟踪会受到微软新编程范式的影响.我们现在有一个语义堆栈和几个物理堆栈(我选择的单词).
我看到的是异常的StackTrace属性(在调试器中)是物理的属性,连接起来:
private async Task CheckFooAndBar()
{
var log = LogManager.GetLogger("Test");
log.Info("CheckFooAndBar");
try
{
await Foo();
}
catch (Exception ex)
{
log.Info("StackTrace of last exception: " + ex.StackTrace);
}
Console.ReadKey();
}
private async Task Foo()
{
await Task.Factory.StartNew(() => Thread.Sleep(1000));
await Bar();
await Task.Factory.StartNew(() => Thread.Sleep(1000));
}
private async Task Bar()
{
await Task.Factory.StartNew(() => Thread.Sleep(1000));
throw new Exception();
await Task.Factory.StartNew(() => Thread.Sleep(1000));
}
Run Code Online (Sandbox Code Playgroud)
这给出了:
StackTrace of last exception: at NLogAsyncExceptionTestCase.Program.<Bar>d__d.MoveNext() in c:\Users\Jens\Documents\Visual Studio 2012\Projects\NLogAsyncExceptionTestCase\NLogAsyncExceptionTestCase.Console\Program.cs:line 53
--- End …Run Code Online (Sandbox Code Playgroud) 我一直在调查我的生产应用程序的缓慢预热时间,我得到了一些意想不到的结果.
在各种Azure VM上进行测试表明,预热时间与应用程序服务器性能密切相关(因此它不是外部请求,包括sql),但真正有趣的是与Azure Web Apps和我自己的本地计算机的比较(所有时间都是从大约3次运行的平均值):
VM A0: >1m
VM A2: 13s
VM D2V2: 6.8s
VM D5V2: 7.8s
Wep App P2: 25s
Web App S2: 26.5s
My local machine: 6.6s
Run Code Online (Sandbox Code Playgroud)
我的本地机器是一台3.3GHz的i5.
即使本地计算机通过Internet连接到同一SQL Azure数据库,该本地计算机也是最快的,并且该请求包括实体框架的模型检查.
所有测试都使用.NET 4.6.1,这是目前最新的版本.
明显的结论:
这看起来很可疑.还有什么想法可能会发生什么?或者要测试什么?
在进行一些分析之后编辑:以下所有内容都没有解释我的问题,但它仍然是有趣的信息(在另一个A2 VM上测试,在连接分析器时总请求时间为20秒):
几乎没有并行化.
我偶然发现了一些奇怪的事情:我BadImageFormatException不知道它可能会引用什么图像(汇编).
我减少了解决方案,使它只包含一个没有依赖项的项目:
如您所见,它只使用System(和mscorlib),当然我不会在运行时加载程序集.
它编译为AnyCpu与.NET 4.5.2,VS 2015与C#6,虽然这些都不重要.
我尝试使用C#5制作样本,但是一旦我替换了所有的"?".运营商,它停止发生.
我主持了这个项目,以便人们可以自己尝试:
git clone -b crash-sample https://github.com/jtheisen/moldinium.git
Run Code Online (Sandbox Code Playgroud)
我在4台机器上进行了清洁和测试,所有这些都显示出相同的效果.
崩溃的堆栈跟踪是:
Ex.: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at IronStone.Moldinium.LiveList.<>c__DisplayClass10_0`1.<Where>b__2(ListEvent`1 v)
at IronStone.Moldinium.ActionObserver`1.OnNext(T value) in C:\Source\Repos\moldinium\ConsoleApplication1\Rx.cs:line 51
...snipped...
Run Code Online (Sandbox Code Playgroud)
在输出上运行PEVerify会产生以下错误:
[IL]:错误:[C:\ Source\Repos\moldinium\ConsoleApplication1\bin\Debug\Bad.exe:IronStone.Moldinium.LiveList + <> c__DisplayClass10_0`1 [TSource] :: b__2] [offset 0x0000013B]无法解析令牌.
?.从Select.cs文件中删除所有操作符可以解决该问题.
使用ILSpy我已将问题隔离到:
IronStone.Moldinium.LiveList.<>c__DisplayClass10_0`1.<Where>b__2
Run Code Online (Sandbox Code Playgroud)
您可以在主旨看(通过ILSpy)方法的IL转储这里.Bad IL是使用?.Good IL时的C#5.0风格.
这是用VS2015.3构建的
CSC版本:Microsoft(R)Visual C#编译器版本1.3.1.60616
我经常想要将特定的聊天记录器中的日志记录排除到某个级别.不幸的是,以下第一条规则对于该记录器的所有级别都是最终的,因此第二条规则(这只是我的默认规则)不会记录任何内容:
<logger name="ChattyLogger" maxlevel="Warn" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Info" writeTo="default" />
Run Code Online (Sandbox Code Playgroud)
一种可能性是使用过滤器:
<logger name="ChattyLogger" writeTo="blackhole">
<filters>
<when condition="level<=LogLevel.Warn" action="IgnoreFinal" />
</filters>
</logger>
<logger name="*" minlevel="Info" writeTo="default" />
Run Code Online (Sandbox Code Playgroud)
但是语法很难看,特别是长度和逃避条件表达式的需要.
由于这似乎是一个普遍的要求,我想知道我是否忽略了一些东西.
我在Silverlight下使用nlog,但我认为这无关紧要.
我很高兴看到VS2012的设计师比旧版更接近Blend.我仍然没有找到的一件事是Blend的"资源视图":

VS2012有一些它称为资源视图,但这是不同的东西.
如果没有这个,除了通过点击使用它们的控件之外,无法访问模板.
我只是在学习TypeScript而且我对它的性质感到有点困惑any.看看这个:
var x: any = 1;
var y = 1;
x = y;
y = x; // why does this not cause a compile-time error?
Run Code Online (Sandbox Code Playgroud)
起初我理解any为没有任何承诺的类型 - 这就是为什么第一项任务合理可行 - 但似乎在其他情境(第二项任务)中,它可以是一种具有所有可以想象的承诺的类型.
例如,这件疯狂也编译得很好:
undefined.foo
Run Code Online (Sandbox Code Playgroud)
那是因为undefined假设是any,这是一种承诺一切的类型.嗯.
对比这个
var a : HTMLElement = new HTMLDivElement();
var b = new HTMLDivElement();
a = b;
b = a; // doesn't compile. phew.
Run Code Online (Sandbox Code Playgroud)
在这里,我们得到了我希望通过强类型语言为更特殊的东西分配更通用的东西:错误,作为显式强制转换是必要的:
b = <HTMLDivElement>a; // ah, you mean it's really a div...
Run Code Online (Sandbox Code Playgroud)
在大多数使用的情况下any …
我想知道是否其他人可以根据System.Uri标准.NET框架中可用的方法或其他方法,提出一种简化相对URL的更好方法。我的尝试有效,但是非常可怕:
public static String SimplifyUrl(String url)
{
var baseDummyUri = new Uri("http://example.com", UriKind.Absolute);
var dummyUri = new Uri(baseDummyUri , String.Join("/",
Enumerable.Range(0, url.Split(new[] { ".." }, StringSplitOptions.None).Length)
.Select(i => "x")));
var absoluteResultUri = new Uri(dummyUri, url);
var resultUri = dummyUri.MakeRelativeUri(absoluteResultUri);
return resultUri.ToString();
}
Run Code Online (Sandbox Code Playgroud)
例如,这给出了:
./foo -> foo
foo/./bar -> foo/bar
foo/../bar -> bar
Run Code Online (Sandbox Code Playgroud)
使它如此尴尬的问题是,Uri它本身似乎并没有简化相对的URL,而且MakeRelativeUri仅适用于绝对URL。因此,为了诱使Uri类执行我想要的操作,我构造了具有适当数量的嵌套的基本URL。
我也可以使用System.IO.Path,但是随后我必须搜索并替换反斜杠来斜杠...
必须有更好的方法,对吗?
我现在对.NET中平台的术语感到困惑 - 我曾经理解它直到我们拥有PCL.
我找到了以下文件:
对于初学者来说,第一个文档是指概念平台,其名称为"netstandard",称为".NET平台标准".后者称之为".NET标准"(同时它引入了一个新的".NET标准库").
我真的不明白为什么第一个文档在顶部有一个免责声明,第二个文件描述了后继概念:似乎至少显示版本关联的表在第一个文档中是更新的.
那么".NET平台标准"和".NET标准库"这两个概念之间的区别是什么?描述新概念的第二个文档中的表只显示了基本上是旧表的内容,而没有为这个新的".NET标准库"添加新行 - 好像概念毕竟是相同的.免责声明真的只是建议重命名吗?
NuGet增添了更多神秘感:
Json.NET NuGet包有一个名为".NETStandard"的目标(显然NuGet使用其中一个东西的第三个名字)并且我认为这应该与"netstandard"相同,对吧?这实际上是".NET平台标准",对吗?
Microsoft.AspNet.Mvc包的RC 有一个名为".NETPlatform 5.4"的目标.那是什么?它的调用方式不同,并且版本太高而无法与.NET平台标准版或.NET标准库有任何关系,无论两者之间的关系如何.嗯.
有人知道所有这些真正意味着什么吗?
编辑:
我设法弄清楚了一点:正如Lex Li所说,rc版本Microsoft.AspNet.Mvc已经不复存在了.它使用了短名称"dotnet5.4",它在第一个文档中确实被引用为已弃用并且长期称为".NET平台".该软件包的当前最新版本可能是名为"Microsoft.AspNetCore.Mvc"的版本,它仅指非失效的目标名称.
这就解决了问题的NuGet部分,我的理论是,".NET标准库"只是对以前称为".NET平台标准"的重命名.这就留下了".NET平台"这个术语,我怀疑这个版本的版本计数没有重置为"1"时,这个版本的名称更为旧版.
也许知道这些事情的人可以确认或纠正这一点.
信号量是一种多线程锁定机制,可确保只有有限数量的线程在给定资源上运行。互斥体是一种特殊情况,其中有限数量为 1。
异步编程与多线程编程有很多共同点(有时也有关系),尽管它本身并不是多线程的。
以下代码创建十个任务,只需等待一秒钟并记录其开始和结束。
所有这些都仅在一个线程上执行(我假设已经进行了适当的同步上下文维护,例如 WPF 中的情况)。
因此,即使只有一个线程,我们也有“并行”任务,并且在某些用例中,人们可能希望将对资源的访问限制为仅少数或其中一个任务。(例如,限制并行网络请求。)
看来需要一个“异步信号量”——这个概念不锁定线程,而是锁定异步延续。
我已经实现了这样一个信号量来检查它是否确实有意义并阐明我的意思。
我的问题是:这个东西是否已经可用,最好是在 .NET 框架本身中可用?我找不到任何东西,尽管在我看来它应该存在。
这是代码(LINQPad 在此分享):
async void Main()
{
// Necessary in LINQPad to ensure a single thread.
// Other environments such as WPF do this for you.
SynchronizationContext.SetSynchronizationContext(
new DispatcherSynchronizationContext());
var tasks = Enumerable.Range(1, 10).Select(SampleWork).ToArray();
await Task.WhenAll(tasks);
"All done.".Dump();
}
AsyncSemaphore commonSemaphore = new AsyncSemaphore(4);
async Task SampleWork(Int32 i)
{
using (await commonSemaphore.Acquire())
{
$"Beginning work #{i} {Thread.CurrentThread.ManagedThreadId}".Dump();
await Task.Delay(TimeSpan.FromSeconds(1));
$"Finished work #{i} {Thread.CurrentThread.ManagedThreadId}".Dump();
}
}
public …Run Code Online (Sandbox Code Playgroud) .net ×4
c# ×3
async-await ×2
azure ×2
.net-core ×1
asp.net ×1
asp.net-core ×1
asynchronous ×1
c#-6.0 ×1
designer ×1
logging ×1
nlog ×1
nuget ×1
roslyn ×1
sql ×1
sql-server ×1
stack-trace ×1
typescript ×1