Tag: .net

在C#中将代理投射到Func

我有代码: public delegate int SomeDelegate(int p); public static int Inc(int p) { return p + 1; } 我可以把Inc成SomeDelegate或者Func<int, int> : SomeDelegate a = Inc; Func<int, int> b = Inc; 但是我不能把Inc成SomeDelegate ,然后用像这样的常用方法SomeDelegate为Func<int, int> : Func<int, int> c = (Func<int, int>)a; // Сompilation error 我怎么能做到这一点?

将DateTime转换为TimeSpan

我想将一个DateTime实例转换为一个TimeSpan实例,有可能吗? 我环顾四周,但我找不到我想要的东西,只能find时间差异。 更具体地说,我想将一个DateTime实例转换为毫秒,然后将其保存到IsolatedStorage中。

如何存储/检索RSA公钥/私钥

我想使用RSA公钥encryption。 什么是存储或检索私钥和公钥的最佳方式? XML是一个好主意吗? 如何获得钥匙? RSAParameters privateKey = RSA.ExportParameters(true); RSAParameters publicKey = RSA.ExportParameters(false); 由于RSAParameters具有以下成员:D,DP,DQ,指数,InverseQ,模数,P,Q 哪一个是关键?

阻止并等待事件

它有时候想阻止我的线程,等待事件发生。 我通常做这样的事情: private AutoResetEvent _autoResetEvent = new AutoResetEvent(false); private void OnEvent(object sender, EventArgs e){ _autoResetEvent.Set(); } // … button.Click += OnEvent; try{ _autoResetEvent.WaitOne(); } finally{ button.Click -= OnEvent; } 但是,这似乎应该是我可以提取给一个普通的类(或者甚至是框架中已经存在的东西)的东西。 我希望能够做到这样的事情: EventWaiter ew = new EventWaiter(button.Click); ew.WaitOne(); EventWaiter ew2 = new EventWaiter(form.Closing); ew2.WaitOne(); 但我无法真正find构build这样一个类的方法(我无法find一个把事件作为parameter passing的好方法)。 谁能帮忙? 为了举例说明为什么这可能是有用的,考虑这样的事情: var status = ShowStatusForm(); status.ShowInsertUsbStick(); bool cancelled = […]

固定对象时的GC行为

在从mscorlib浏览PinnableObjectCache的代码时,遇到以下代码: for (int i = 0; i < m_restockSize; i++) { // Make a new buffer. object newBuffer = m_factory(); // Create space between the objects. We do this because otherwise it forms // a single plug (group of objects) and the GC pins the entire plug making // them NOT move to Gen1 and […]

自MS14-059以来,System.Web.MVC不会复制到bin文件夹中。 如何防止由于Windows更新而创build缺lessDLL的生成?

今天早上有报道说,我们的QA服务器上的Web应用程序被完全破坏,从Web.config报告了以下错误: 无法加载文件或程序集“System.Web.Mvc,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其某个依赖项。 该系统找不到指定的文件 记住看到提到MVC的Windows Update,我做了一些挖掘,发现很多 人 报告最近的Windows Update中断MVC。 在深入了解这些问题和我们的服务器之后,似乎被咬的东西与其他问题中的东西并不匹配,但确实有关联。 以下是我们所知道的: 我们的应用程序被破坏使用ASP.NET MVC 5.1 MVC是通过NuGet安装的 我们的BuildServer和QA服务器没有安装MVC 5.1(因此没有安装GAC) 我们相信已经破裂导致了“糟糕的构build”被创造出来: 尽pipe没有在GAC中安装MVC 5.1,但是通过Windows Update在BuildServer上安装了一个用于MVC 5.1的补丁 该补丁已将MVC 5.1的“更新”版本放入GAC中 当DLL在GAC中时,CopyLocal = true被忽略; 因此,自补丁以来,这意味着从BuildServer生成的应用程序在输出文件夹中不再具有System.Web.MVC 由于System.Web.MVC不在我们的QA服务器的GAC中(它们尚未打补丁),因此应用程序现在失败,因为无法findSystem.Web.MVC 假设上面描述的行为是正确的,这意味着任何时候MS通过Windows Update 为我们没有的GAC中的NuGet DLL提供服务,我们的BuildServer将开始生成不完整的构build(错过了那些已经注入到GAC中的DLL) 。 升级到MVC 5.2解决了这个问题(可能是因为它没有打补丁,所以没有注入到GAC中)。 该DLL现在被复制到输出文件夹。 除了版本号更改(没有添加/编辑<Private>节点)之外,升级到5.2.2的差异没有变化。 我们不希望启动GACing的一切,也不会创build手动构build步骤来将所有的DLL复制到bin文件夹中,以防MS修补它们。 那么,我们今天可以改变什么呢,以确保我们不会因为未来的MS修补其他DLL而无声无息地生成回构build错误的BuildServer?

无法在C#应用程序中为我的线程使用多个处理器组

根据MSDN文档和Stephen Toub的回答 ,我的C#应用​​程序应该使用每个处理器组中的每个逻辑处理器,因为它是根据需要configuration的(请参阅下面的App.config)。 我使用NUMA体系结构在Windows Server 2012上运行我的应用程序:2 x [cpu Xeon E5-2697 v3,每个处理器有14个核心,每个都有超线程激活] => 2 x 14 x 2 = 56个逻辑处理器。 我的应用程序从“线程类”或“Parallel.For”启动80个线程,在这两种情况下,只需要28个逻辑处理器,全部来自同一个处理器组。 为什么任务调度程序只在一个处理器组上分配我的线程? 我的代码在GitHub上可用,或者可执行文件可以在我的主页上下载 我已经在social.msdn.microsoft.com上提出了这个问题,没有任何答案。 更新2015-01-26:我在connect.microsoft.com上报告了一个错误 更新2015-01-30:我添加了CoreInfo转储作为额外的参考。 更新2015-01-30:问题也发生在prime95 ,它只提供select28个线程(不是C#相关) 更新2015-01-30:现在,我的工具可以显示更多信息,如每个节点的处理器掩码。 这听起来像我没有访问其他节点(节点我不跑) 更新2015-02-02,我们没有在这个特定的服务器上安装思杰(对不起,我错了) 更新2015-02-02,我们联系了HP … 更新2015-02-03,添加更多信息到我的程序显示processorGroup每个线程和更less的小工具。 更新2015-02-17,在与惠普开发团队交谈之后,我更新了自己的答案,以反映我学到的东西。 (只是想提一下,我收到了来自HP的优秀支持) 惠普在2015-05-13更新中,在“客户咨询”笔记中确认了这个问题。 看到这个链接的文件ID: c04650594 我将.Net 4.5(或4.5.1)App.Config设置为: <?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <Thread_UseAllCpuGroups enabled="true"></Thread_UseAllCpuGroups> <GCCpuGroup enabled="true"></GCCpuGroup> <gcServer enabled="true"></gcServer> </runtime> <startup> <supportedRuntime version="v4.0" […]

使用WiX安装程序复制Visual Studio COM注册

曾几何时,一位年轻的,天真的工程师认为将自己的应用程序的一些function分离成用C#编写的COM组件是个好主意。 Visual Studio拥有所有的工具,对吧? .NET实际上是为此而做出的,对吧? 哈! 他说,这将是容易的。 我将有组件的体面的分离,使业务逻辑远离前端,并与COM,我将能够在任何地方使用它! 他愉快地在项目属性中检查了register for COM interopcheckbox的register for COM interop ,暴露了他想要的分类,然后继续前进。 哦,这样的select做出的审判。 现在这位年轻的工程师,更有经验的人现在不会希望这样的人了。 然而,他肩上的负担却是沉重的, 他希望减轻负荷。 WiX是一个用于从XML生成Windows Installer文件的工具。 这吸引了他 – 它可以很简单地复制一些正确的Windows安装程序文件所需的大部分代码,只需从less量configuration文件中复制即可。 他的目光正在抬头。 使用WiX 2.0,他可以轻松生成注册C#COM对象所需的文件。 这涉及到使用工具tallow。 他会做如下的事情: tallow -c -nologo MyComExposedLibrary.dll > MyComExposedLibrary.wxs (最初这是手动完成的,但最终我将这些步骤logging到一个小工具中,设置最终目录ref ID,组件ID,文件ID,GUID和代码库)。 然后,随后的安装程序将安装,如果应用程序工作,将会有欢乐的庆祝。 它没有。 这位年轻的工程师多年来一直在研发PC和testing安装PC的差异。 “所有registry项都是一样的!” 他会惊呼。 “MyComExposedLibrary的一切都注册了,我发誓! 除此之外,事实并非如此。 在第三天的黎明之后,他意识到还有另一个Visual Studio注册的对象,他的安装程序不是:MyComExposedLibrary.tlb文件。 显然,Visual Studio一直在注册这个文件,在HKLM\Software\Classes\Interfaceregistry项中创build其他子项,并在HKLM\SOFTWARE\Classes\TypeLib注册typelib。 Tallow没有任何帮助,抱怨说.tlb不是一个文件夹。 也不是WiX 3.0testing版 – 这似乎有更多的问题让事情工作。 我也给了热火一个尝试。 这生成了registry元素和类元素。 […]

为什么.NET的File.Open使UNCpath过度的SMB调用?

我有一个代码块,需要打开并使用UNCpath从NAS服务器读取很多小文本文件。 此代码是最初用C ++编写的模块的一部分,但现在正在转换为C#。 C#版本明显较慢。 我确定打开文件的电话几乎占了所有的性能差异。 使用WireShark我发现这是因为System.IO.File.Open调用比类似的C ++代码更多的SMBnetworking请求。 C ++代码进行这个调用: FILE *f = _wfsopen(fileName, L"r", _SH_DENYWR); 这会导致以下一系列SMB请求: NT Create AndX Request, FID: 0x0004, Path: \\a\\i\\a\\q\\~141106162638847.nmd NT Create AndX Response, FID: 0x0004 Trans2 Request, QUERY_FILE_INFO, FID: 0x0004, Query File Basic Info Trans2 Response, FID: 0x0004, QUERY_FILE_INFO Read AndX Request, FID: 0x0004, 1327 bytes at offset 0 Read […]

检测窗口字号(100%,125%,150%)

我创build了一个完美的应用程序,直到用户select125%或150%。 这会打破我的申请。 后来我发现了一种通过检测DPI来查找字体大小的方法。 这个工作很好,直到用中文版本的Windows 7开始使用我的应用程序。 整个应用程序在中文窗口7中断。从我所知道的(我不能真正testing它,因为我只有英文版本和安装语言包不会导致问题)中国字符造成了一个奇怪的DPI,打破了我的申请。 我现在的代码是这样的: if (dpi.DpiX == 120) //For 125% fonts { //Resize form and set default font to correct problems } else if (dpi.DpiX == 96) //For 100 and 150% fonts { //Resize form and set default font to correct problems } 在英文版本的Windows 7上,这个版本很好用,但不知何故,中文版本正好跳过了这个版本,而且表格本身也被破坏了,控件甚至没有显示出来,字体也非常大,推动了这个问题,图片框被移动了。 那么,在没有检测API的情况下,检测窗口字体比例(100%,125%和150%)的好方法是什么? 我需要一些可以在所有的Windows 7操作系统和语言上运行的东西。