我有一个简单的问题,但我也是PowerShell的初学者.我认为这与ps命令的输出是对象而不是文本的事实有关.
我想要做的是获取一个名为"sql"的服务列表.
这是我到目前为止所尝试的但是每次尝试都没有返回:
Get-Service | where {$_ -match 'sql'}
Get-Service | where {$_ -like 'sql'}
Get-Service | Select-String sql
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种模式,让我将每个命令的输出视为可搜索的文本.
那么这实际上是做什么的呢?
我搜索了Chrome Dev Tools的发行说明,但找不到它的踪迹.这些教程都没有提到它,所以我猜它是新的.
尝试一些代码我似乎表现得与"Step Into"相同,但找不到区别.
有点惊讶为什么这不起作用
这是编译器的限制还是不支持它是否合理?
public class Class1<T> : IInterface
where T : Test2
{
public T Test { get; private set; }
}
public class Test2
{
}
internal interface IInterface
{
Test2 Test { get; }
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
'ClassLibrary1.Class1<T>' does not implement interface member 'ClassLibrary1.IInterface.Test'.
'ClassLibrary1.Class1<T>.Test' cannot implement 'ClassLibrary1.IInterface.Test' because it does not have the matching return type of 'ClassLibrary1.Test2'.
Run Code Online (Sandbox Code Playgroud) 我正在阅读Grant Fritchey的"Dissecting SQL Server Execution Plans",它帮助我了解为什么某些查询很慢.
但是,我很难理解这种情况,简单的重写速度要快得多.
这是我的第一次尝试,需要21秒.它使用派生表:
-- 21 secs
SELECT *
FROM Table1 AS o JOIN(
SELECT col1
FROM Table1
GROUP BY col1
HAVING COUNT( * ) > 1
) AS i ON ON i.col1= o.col1
Run Code Online (Sandbox Code Playgroud)
我的第二次尝试快3倍,只是将派生表移出临时表.现在它快了3倍:
-- 7 secs
SELECT col1
INTO #doubles
FROM Table1
GROUP BY col1
HAVING COUNT( * ) > 1
SELECT *
FROM Table1 AS o JOIN #doubles AS i ON i.col1= o.col1
Run Code Online (Sandbox Code Playgroud)
我的主要兴趣是为什么从派生表转移到临时表会如此提高性能,而不是如何使其更快.
如果有人能告诉我如何使用(图形)执行计划诊断此问题,我将不胜感激.
Xml执行计划:https: //www.sugarsync.com/pf/D6486369_1701716_16980
编辑1
当我创建关于group by中指定的2 …
我正在计算一些算法,并在下面提出了时间函数.但是,它总是返回0毫秒.
问题是为什么它显然需要几秒钟时总是0毫秒.我是F#开发人员的开始,所以我可能错过了一些概念.
请注意,问题不是关于更高效的Fibonacci算法,我也知道该函数测量的是实际世界时间而不是CPU时间(可以通过Sys.time()获得)
let time f x =
let timer = new System.Diagnostics.Stopwatch()
timer. Start ( )
try f x finally
printf "Took %dms" timer.ElapsedMilliseconds;;
let rec fib x =
if x < 2 then 1
else fib(x-1) + fib(x-2)
time Array.iter (fun x -> ignore (fib x) ) [| 1 .. 40 |]
Run Code Online (Sandbox Code Playgroud)
感谢您为F#开发人员提供的任何帮助和指示
问候,汤姆
这个问题更多的是关于C#而不是关于log4net(我认为).
我创建了一个自定义appender,让它读取程序先前设置的静态字段.
令我惊讶的是,静态字段被重新初始化,并且设定值不会使其成为追加者.
我启动了debugview,发现静态构造函数被调用了两次(!).这应该在同一个appdomain中不可能吗?只有debugview才能解决这个问题,因为VS没有在断点上第二次命中.
请注意,这不是关于避免使用log4net的静态变量的问题.我对log4net使用什么样的魔法来实现这个目标感兴趣?
编辑#1
你好约翰,大粉丝.
我按照要求进一步隔离了它.首先,我开始空白并努力解决暴露错误的目标情况.由于我几乎匹配了目标角色,但仍然没有重复,我反过来了.
从错误情况开始,我删除了所有我认为不重要的东西,直到它开始......按预期工作.
当运行时试图解析log4net程序集时,似乎有一些奇怪的事情(如在调试模式中观察到的那样)
这是我在debugview中看到的:
[7756]一般:WARN - 无法解析模块的'log4net'版本.异常:System.NullReferenceException:未将对象引用设置为对象的实例.[7756]在DebuggerShared.Services.EventArgs.ModuleLoadedInDebuggerEventArgs..ctor(String modulePath,String moduleLoadMessage,Boolean isUserCode,String name,String version)[7756]一般:WARN - 无法解析模块的"FollowUp.Common"版本.异常:System.NullReferenceException:未将对象引用设置为对象的实例.[7756]在DebuggerShared.Services.EventArgs.ModuleLoadedInDebuggerEventArgs..ctor(String modulePath,String moduleLoadMessage,Boolean isUserCode,String name,String version)
并且VS在调试模块屏幕中没有显示路径的值.现在我是如何设法达到这种状况的?很奇怪,它设法加载程序集,但不能告诉从哪里:)
这是一个孤立的情况,如果我进一步修改它开始按预期工作.
https://www.sugarsync.com/pf/D6486369_1701716_00940
我仍然对技术细节感兴趣,但在删除对log4net的引用并再次添加它之后,它们都开始重新运行了.我很高兴它有效,但它让我觉得我没有彻底的解释
此外,静态构造函数*现在被调用两次,这是有意义的,因为当log4net得到它时,类型再次初始化.
我认为花费更多时间在这个原因上是不值得的,我认为解决方案处于一种奇怪的状态并且理解所有这些都具有边际价值.不过,如果你能想到解释这个的话,我会很高兴来到这里.
编辑#2
事实证明,有些程序集确实被加载了两次,包括一个带有静态构造函数的程序集.我稍后会调查这是如何实现的,但我通过禁用和启用Costura来解决这个问题.Costura是一个msbuild任务,它将所有程序集合并为一个.我不是说Costura是根本原因.可能很容易就是csproj/sln文件处于奇怪的状态.
考虑如何在未来更快地诊断此问题,我启动了sysinternals ProcessExplorer.现在我希望看到程序集只被加载一次,但我发现它们被加载了两次.似乎这是仅在.NET 4中修复的运行时中的错误
http://forum.sysinternals.com/why-some-net-assemblies-are-duplicated-in-memory_topic15279.html https://connect.microsoft.com/VisualStudio/feedback/details/467560/clr-maps-assemblies -INTO最虚拟地址空间的两倍
编辑#3 Costura使装配加载两次.项目所有者在同一天修复了该问题:) http://code.google.com/p/costura/issues/detail?id=17&thanks=17&ts=1328826304
我们需要一个Costura标签,但我没有必要的1500点声望点.如果您拥有这些权利,请创建它.谢谢.
亲切的问候,汤姆
这个问题与我自己的案例有针对性,因为任何拥有本地化应用程序并且必须提供独立EXE的人都有这个问题 - 他们会想要使用ILMerge(或Costura或某些自制程序解决方案)来放置本地化DLL(或任何其他程序集)进入他们的EXE--但一旦他们这样做,他们就不能再调试他们的代码了.VS调试器将拒绝接受为原始EXE生成的原始PDB文件,可能是因为ILMerge步骤更新校验和或更改GUID.
我想知道的是,如果有任何解决方法...就像一些鲜为人知的ILMerge选项,也许吧?它让我感到非常普遍和不必要的调试能力.
我相信在本地化之后调试这样一个应用程序的唯一其他方法是维护一个使用DLL非ILMerged的并行构建选项,这很好,除非您碰巧想要调试本地化代码本身(例如,我).那你真的不走运.谁能想到其他选择?
我也尝试使用Costura,但由于本地化DLL都包含相同名称的资源(并且与主资源AppName.resource相同),因此您只能在引用中添加一个这样的DLL:不允许使用后续的DLL.有没有办法噱头Costura工作?(如果它可以工作,PDB问题可能不会发生,因为组合是视觉工作室构建的一部分..?)
编辑:我正在寻找导致PDB/EXE匹配的想法.我意识到你可以在十六进制编辑器中破解pdb.然而,问题特别询问了如何使系统按预期工作.
将多个文件复制到不存在的文件夹并将其创建是很容易的:
Copy-Item C:\Temp\aa C:\Temp2\DoesNotExist
Run Code Online (Sandbox Code Playgroud)
上面的命令将创建文件夹DoesNotExist.这就是我所追求的.
但是当源只是一个文件时,PowerShell的语法是什么呢?
Copy-Item C:\Temp\test.txt C:\Temp2\DoesNotExist
Run Code Online (Sandbox Code Playgroud)
我尝试了C:\ Temp2\DoesNotExist \(带有斜杠),但Powershell说"文件名,目录名或卷标语法不正确." 并拒绝复制单个文件.
我有一个使用Caliburn.Micro的WPF应用程序.当我希望应用程序等待在后台完成某些工作时,我希望能够使用阴影和进度环(来自MahApps.Metro)覆盖应用程序.
我现在所拥有的实际上是有效的,但叠加层在设计时始终处于开启状态.我的ShellView
窗口看起来像这样:
<Window ...>
...
<Grid>
...
<Rectangle x:Name="waitShadow" Fill="#3f000000" Stroke="Black" StrokeThickness="0" Visibility="{Binding IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}" Grid.RowSpan="2"/>
<ContentControl ... Visibility="{Binding IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}">
<Controls:ProgressRing ...> <!-- from MahApps.Metro -->
</Controls:ProgressRing>
</ContentControl>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我的ShellViewModel
班级有一个公共bool属性IsWaiting
,当我把它设置为true
阴影和响铃出现,一切都被禁用.当我将它设置为false
它去恢复正常,所以绑定工作(我使用Fody用的PropertyChanged插件).唯一的问题是该Visibility
属性在设计时没有崩溃.
有没有更好的方法让叠加层在设计时有效?
我正在深入研究这个async-await
机制并观察到了一个TaskCanceledException
我无法解释的问题.
在下面的示例中(自包含)我有声明
await Task.Run(() => null);
Run Code Online (Sandbox Code Playgroud)
我知道这个声明本身是无用的,但我把问题分开了,真正的代码有逻辑,在某些情况下返回null.
为什么这会抛出TaskCanceledException
?如果我返回一个任意数字(在下面的例子中为5),它就不会抛出.
此外,如果我await
的方法VS的调试器中断,但如果我不这样做await
,那么只有一条消息写入VS的输出窗口.
internal class Program
{
private static void Main(string[] args)
{
var testAsync = new TestAsync();
// Exception thrown but the debugger does not step in. Only a message is logged to the output window
testAsync.TestAsyncExceptionOnlyInTheOutputWindow();
// Exception thrown and the debugger breaks
testAsync.TestAsyncExceptionBreaksIntoTheDebugger();
Console.ReadKey();
}
}
internal class TestAsync
{
public async void TestAsyncExceptionOnlyInTheOutputWindow()
{
TestNullCase();
}
public async void TestAsyncExceptionBreaksIntoTheDebugger() …
Run Code Online (Sandbox Code Playgroud) .net ×3
c# ×3
fody-costura ×2
powershell ×2
async-await ×1
f# ×1
generics ×1
ilmerge ×1
localization ×1
log4net ×1
sql-server ×1
wpf ×1