我正在使用一些多GB的文本文件,并希望使用PowerShell对它们进行一些流处理.这很简单,只需解析每一行并提取一些数据,然后将其存储在数据库中.
不幸的是,get-content | %{ whatever($_) }
似乎在管道的这个阶段保持整个行集在内存中.它的速度也非常慢,需要花费很长时间才能完全阅读.
所以我的问题是两部分:
get-content
进行迭代的PowerShell 似乎比C#脚本慢100倍.我希望我在这里做一些愚蠢的事情,比如错过一个-LineBufferSize
参数或什么......
Visual Studio生成的*.FileListAbsolute.txt文件是什么?它们使我的搜索混乱.例如,当我搜索*.csproj以将项目添加到.sln时.
Visual Studio是否使用它们?有没有办法让它不生成它们?
我STFW,但它充满了人们列出碰巧有这些文件的目录的结果.
这里的很多人可能都熟悉Joel Spolsky最受欢迎的博客文章之一,请主席先生,我可以有一个链接器,在那里他呼吁一种方法来删除.NET框架的依赖关系,这样就可以开发一个独立的应用程序,出售.
Visual Studio开发团队的Jason Zander当时回答了他对这个主题的看法,认为这个话题有点没有意义 - 在运行时(以及其他方面)修复安全问题的能力是他们的主要关注点.总的来说,小开销是值得的.
快进到2009年.现在有几个团体声称拥有C#链接器.(Jason Zander甚至自己说实现它不会花太多时间.)我们现在拥有一个庞大的200-300 mb跨平台完整的.NET 3.5安装程序,而不是可爱的,十几个下载的.NET 1.0.包含用于x86,x64和ia64的.NET版本.微软建议减少运行时间大小包括:
更糟糕的是,正如我所理解的那样(如果我错了请纠正我)客户端配置文件甚至没有注册Windows,因为安装了.NET 3.5.这意味着如果计算机上安装了多个.NET 3.5客户端应用程序,则没有人会看到对方,并且将一次又一次地重新安装运行时!
我真的不知道微软在想什么.即使假设最坏的情况安装将是针对一个目标平台(例如,x64)并且仅需要包括那些库,您仍然在应用程序上查看超过60 MB的开销.即使是最着名的.NET应用程序之一,Paint.NET,由于存在大量的.NET依赖性,因此很难安装应用程序. 如果他们在分发免费应用程序时遇到问题,那么世界其他地方呢?最后,他们必须制作一个安装Microsoft Installer 3.1,.NET运行时引导程序以及所有其他依赖库的引导程序,然后才能安装自己的应用程序.
那怎么样呢.链接器.是否存在任何好的 - 或者只是简单地构建C#应用程序而不需要用户安装大量.NET运行时的工具?
更新:所以,看起来有几个选项:
单声道:
.净:
看起来Mono工具正在使用; 基于.NET的工具怎么样?与他们有任何其他经验,或者我们只是要等待微软将其推向每个人?我不禁想到将.NET 4.0推出需要多长时间......
鉴于此代码:
class C
{
C()
{
Test<string>(A); // fine
Test((string a) => {}); // fine
Test((Action<string>)A); // fine
Test(A); // type arguments cannot be inferred from usage!
}
static void Test<T>(Action<T> a) { }
void A(string _) { }
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨Test(A)
无法弄清楚T
是string
.
这对我来说似乎是一个非常简单的案例,我发誓我在其他通用实用程序和扩展函数中依赖于更复杂的推理.我在这里错过了什么?
更新1:这是在C#4.0编译器中.我在VS2010中发现了这个问题,上面的示例来自我在LINQPad 4中制作的最简单的repro.
更新2:在可用的列表中添加了更多示例.
(我不敢相信我实际上是在问这个问题,但是我当天没有脑力.)
我刚刚写了我的第一个严肃的PowerShell脚本,我真的很高兴.我计划每天使用它.我希望能够从Posh命令行调用它.我会给它一个动词 - 名词类型的名字,但是现在它是一个简单的.ps1,而不是那些采用params等的高级函数之一.
那么它应该去哪里以及如何从Posh命令行调用它?我打算写更多!他们应该去哪儿?
你们在哪里放置PowerShell脚本以及如何组织它们?我在制作C#和C++工具方面有很多经验,知道如何命名它们以及放置它们的位置.而在另一个极端我已经做了很多糟糕的.bat文件,这些文件通常是独立的或堆放在某个文件夹的堆中.但PowerShell似乎非常不同.你可以非常快速地制作糟糕的.bat文件类型的东西,或者你可以用它来构建库和复杂的服务.
我真的很喜欢在开始之前我应该如何开始组织这些事情的一些想法.显然每个人都不一样,所以我希望能有一些讨论.谢谢!
我已经开始使用XmlnsDefinition属性将一些CLR命名空间绑定到一个xmlns中,以方便XAML.
不幸的是,这似乎只适用于使用外部程序集.如果我在与我从XmlnsDefinition引用的命名空间中的类型相同的程序集中有一个XAML文件,那么编译器会给出我正在定义的xmlns中不存在的类型的错误.
将类型移动到外部程序集可以解决问题.
有没有办法在程序集上使用XmlnsDefinition并通过XAML从该程序集中使用它?
我正在寻找有关如何使RX更容易调试的想法.当源通过组合器和节流阀以及发布等时,找到失败点可能非常困难.
到目前为止,我一直在做与复杂的Enumerable链类似的事情 - 插入Do()进行跟踪,将一个"name"字段添加到匿名类型中,有时会抓住堆栈跟踪.但是我们可能有数百个我们系统中的生产者和成千上万的消费者,并且很难分离问题.
你有什么样的技巧来调试你的RX使用?
在PowerShell中,我发现自己一遍又一遍地为匹配做这种事情:
some-command | select-string '^(//[^#]*)' |
%{some-other-command $_.matches[0].groups[1].value}
Run Code Online (Sandbox Code Playgroud)
所以基本上 - 运行一个生成文本行的命令,对于每一行,我想在行内的正则表达式捕获上运行命令(如果它匹配).看起来很简单.上面的工作,但有没有一个更短的方法来拉出这些正则表达式捕获组?Perl有1美元,依此类推,如果我没记错的话.辣妹必须有类似的东西,对吧?我在SO上看过"$ matches"引用,但无法弄清楚是什么让它得到了设置.
我对PowerShell btw很新,刚开始学习.
我昨天在.NET的VS.NET监视窗口中了解了$ exception.这显示了当前抛出的异常,并且在不需要找到小感叹号图标并将鼠标悬停在其上方时节省了大量时间.
观察窗口还有哪些其他特殊变量?
(注意:这个问题是关于.NET,而不是C++.)
在我们的WPF应用程序中,我们拥有全球风格TargetType={x:Type ContextMenu}
.我创建了一个派生自ContextMenu的MyContextMenu,但现在默认样式不适用.
如何告诉WPF我希望MyContextMenu从ContextMenu继承默认样式?希望我可以从我的控件本身(通过静态ctor元数据覆盖或其他什么?)中做到这一点,而不必在任何xaml中乱七八糟.