在AppDomains之间共享数据

我有一个可以有多个AppDomain的进程。 每个AppDomain都会收集一些统计信息。 在指定的时间之后,我想累积这些统计信息并将它们保存到文件中。 一种方法是远程处理,我想避免。 我想到的唯一其他技术是将每个AppDomain的数据保存在一个文件中,并在一段特定时间后,其中一个AppDomain收集所有数据并累积它们。 但如果所有这些都可以在内存中完成,那么这将是理想的,而无需在AppDomains之间序列化信息的成本。 有人有主意吗?

如何在c#中列出.zip文件夹的内容?

如何在C#中列出压缩文件夹的内容? 例如,如何知道压缩文件夹中包含多少项,以及它们的名称是什么?

执行包含来自外部应用程序的脚本组件的SSIS 2012包

我正在编写一个应用程序,它将使用Microsoft.SqlServer.ManagedDTS v 11.0程序集执行SSIS 2012程序包。 我正在尝试执行的程序包是从SSDT-2012设计并成功执行的,并且具有处理无法正确传输的行的脚本组件。 当我尝试运行我的应用程序时,我收到每个脚本组件的错误消息: SSIS.Pipeline:要在SQL Server数据工具之外运行SSIS包,必须安装Integration Services或更高版本的[脚本组件名称]。 配置:使用以下app.config文件在Windows上构建x86应用程序: 唯一相关的代码是: using System; using System.Data; using System.Data.Common; using System.IO; using Microsoft.SqlServer.Dts.Runtime; class MyApp { public void ExecutePackage() { //Assume I have all the variables I need like packageFile, packageName, //srcConnectionString, destConnectionString and eventListener etc. Package pkg; Application app; DTSExecResults pkgResults; app = new Application(); pkg […]

如何将XML映射到C#对象

我有一个XML,我想加载到对象,操纵这些对象(设置值,读取值),然后保存这些XML。 对我来说,在我创建的结构(xsd)中包含XML非常重要。 一种方法是编写我自己的序列化程序,但它是否内置支持它或C#中的开源我可以使用?

如何使用Visual Studio代码引用程序集?

我想在我在OSX上使用Visual Studio Code编写的控制台应用程序中引用System.Drawing.dll。 即我想使用这些使用语句 using System.Drawing; using System.Drawing.Imaging; 避免这种构建错误 Program.cs(56,20): error CS0246: The type or namespace name `Bitmap’ could not be found. Are you missing an assembly reference? 我找不到这方面的教程,我甚至不知道dll是否可用.net核心或单声道或者任何visual-studio-code使用。

Parallel.ForEach比ForEach慢

这是代码: using (var context = new AventureWorksDataContext()) { IEnumerable _customerQuery = from c in context.Customers where c.FirstName.StartsWith(“A”) select c; var watch = new Stopwatch(); watch.Start(); var result = Parallel.ForEach(_customerQuery, c => Console.WriteLine(c.FirstName)); watch.Stop(); Debug.WriteLine(watch.ElapsedMilliseconds); watch = new Stopwatch(); watch.Start(); foreach (var customer in _customerQuery) { Console.WriteLine(customer.FirstName); } watch.Stop(); Debug.WriteLine(watch.ElapsedMilliseconds); } 问题是, Parallel.ForEach比常规foreach大约需要400ms,大约需要40ms。 我究竟做错了什么,为什么这不能像我期望的那样工作?

如何使用C#将JSON发布到服务器?

这是我正在使用的代码: // create a request HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = “POST”; // turn our request string into a byte stream byte[] postBytes = Encoding.UTF8.GetBytes(json); // this is important – make sure you specify type this way request.ContentType = “application/json; charset=UTF-8”; request.Accept = “application/json”; request.ContentLength = postBytes.Length; request.CookieContainer […]

如何重新抛出InnerException而不会丢失C#中的堆栈跟踪?

我通过反思调用一个可能导致exception的方法。 如何在没有包装器reflection的情况下将exception传递给调用者? 我正在重新抛出InnerException,但这会破坏堆栈跟踪。 示例代码: public void test1() { // Throw an exception for testing purposes throw new ArgumentException(“test1”); } void test2() { try { MethodInfo mi = typeof(Program).GetMethod(“test1”); mi.Invoke(this, null); } catch (TargetInvocationException tiex) { // Throw the new exception throw tiex.InnerException; } }

带接口的JsonConverter

我有一个来自客户端的对象,并自动从Web Api 2反序列化。 现在我的模型的一个属性有问题。 此属性“CurrentField”属于IField类型,此接口有2种不同的实现。 这是我的模特(只是假人) public class MyTest { public IField CurrentField {get;set;} } public interface IField{ string Name {get;set;} } public Field1 : IField{ public string Name {get;set;} public int MyValue {get;set;} } public Field2 : IField{ public string Name {get;set;} public string MyStringValue {get;set;} } 我试图创建一个自定义JsonConverter来找出我的客户端的对象是什么类型(Field1或Field2),但我只是不知道如何。 调用我的转换器,当我调用var obj = JObject.load(reader)时,我可以看到该对象; 但我怎样才能知道它是什么类型的? 我做不了类似的事情 […]

在C#中以独占模式打开文件

我想在独占模式下打开一个文件进行读取,如果某个进程/线程已经打开了该文件,我想收到一个exception。 我尝试了以下代码,但没有工作,即使我打开了foo.txt,我仍然可以访问Console.WriteLine语句。 有任何想法吗? static void Main(string[] args) { using (Stream iStream = File.Open(“c:\\software\\code.txt”, FileMode.Open, FileAccess.Read, FileShare.None)) { Console.WriteLine (“I am here”); } return; }