Tag: .net

如何使用IL改变盒装结构

想象一下,我们有一个可变的struct (是的,不要开始): public struct MutableStruct { public int Foo { get; set; } public override string ToString() { return Foo.ToString(); } } 使用reflection,我们可以获取此struct的盒装实例并在框内变异: // this is basically what we want to emulate object obj = new MutableStruct { Foo = 123 }; obj.GetType().GetProperty(“Foo”).SetValue(obj, 456); System.Console.WriteLine(obj); // “456” 我想做的是写一些可以做到这一点的IL – 但速度更快。 我是一个元编程迷; p 取消任何一个值并使用常规IL来改变值是微不足道的 – 但是你不能只是在之后调用它,因为这将创建一个不同的框。 […]

我可以用什么资源来学习分析/优化?

我刚刚inheritance了一个C#项目,该项目运行缓慢,必须开始优化它。 我首先要做的是学习更多关于分析/优化的知识,因为我以前没有这么做。 所以问题是我从哪里开始,我可以阅读哪些书籍/博客/关键词? 我知道像ANTS分析器这样的.net分析器等等,但我不知道如何有效地使用它们。 我还没有真正使用它,只是让它运行在几个示例应用程序上来播放输出。

0MQ:如何以线程安全的方式使用ZeroMQ?

我阅读了ZeroMq指南 ,我偶然发现了以下内容: 您不能在线程之间共享ØMQ套接字。 ØMQ套接字不是线程安全的。 从技术上讲,它可以做到这一点,但它需要信号量,锁或互斥量。 这将使您的应用程序变得缓慢而脆弱。 在线程之间共享套接字远程理解的唯一地方是语言绑定,需要像套接字上的垃圾收集那样做魔术。 后来: 切记: 除了创建它们的线程外,不要使用或关闭套接字。 我也明白ZeroMQ Context是线程安全的。 如果一个类在.Net中注册另一个类的事件,则可以从与创建监听器的线程不同的线程调用此事件。 我认为只有两个选项可以从事件处理程序中通过ZeroMQ-Sockets调度: 将eventhandler-invoking-thread同步到创建ZeroMQ- Socket的线程 通过使用线程安全的ZeroMQ- Context为事件处理程序中的线程创建一个新的ZeroMQ- Socket /获取现有的ZeroMQ- Socket 似乎0MQ-Guide不鼓励第一个,我不认为为每个线程创建一个新的ZeroMq-Socket是高性能/可行的方式。 我的问题 : 在事件处理程序中通过0MQ发布消息的正确模式(它的意图是什么)是什么? 此外,该指南的作者在撰写时还考虑了.Net的ZeroMQ-Binding: 在线程之间共享套接字远程理解的唯一地方是语言绑定,需要像套接字上的垃圾收集那样做魔术。 ? 这里有一些示例代码来强调我的问题/问题: public class ExampleClass { public event EventHandler SomethinIsCalledFromAnotherThread; } public class ByteEventArgs : EventArgs { public byte[] BytesToSend; } public class Dispatcher { ZMQ.Context ctx; public […]

在面向.NET 4+的库中公开通知时,IObservable是否应优先于事件

我有一个.NET库,作为对象模型的一部分将发出某些事件的通知。 在我看来, 事件的主要优点是初学者的可接近性(以及某些消费环境中的简单性),主要的负面因素是它们不可组合 ,因此如果你想做任何事情,它们会被立即强制进入Observable.FromEvent *有趣的是没有编写代码丛。 正在解决的问题的本质是事件流量不会特别频繁或大量(它肯定不会尖叫RX),但绝对没有要求支持4.0之前的.NET版本[因此我可以使用System.Reactive内置的IObservable接口,不会强制对消费者产生任何重大依赖关系]。 我对一些通用指南感兴趣, 但是从API设计的角度来看,更喜欢IObservables不是event的一些具体原因 – 无论我的具体案例可能在哪里 – IObservable频谱。 那么,问题是: 如果我采用最简单的方法并且暴露event而不是IObservable那么对于API消费者来说,是否有任何具体的事情变得更加困难或有问题? 或者,重申:除了消费者必须执行Observable.FromEvent *才能组合事件之外,在API中公开通知时,是否真的没有理由更喜欢IObservable而不是event ? 使用IObservable进行非尖叫-RX内容或编码指南的项目的IObservable将是理想的,但并不重要。 在@Adam Houldsworth的评论中提到NB,我对.NET 4+库的API表面的具体内容感兴趣,而不是对我们这个时代代表更好的“默认架构”的意见调查: ) 注意,在C#中, IObserver和IObservable已经触及了这个问题, 对于Observer vs Delegates,事件和IObservable与普通事件或我为什么要使用IObservable? 。 由于SRP违规,我提出的问题的方面没有在任何答复中得到解决。 另一个略微重叠的问题是.NET Rx优于经典事件? 。 (使用IObservable而不是事件)[ 使用IObservable而不是事件属于同一类别。

创建对象的最佳方式

这似乎是非常愚蠢和基本的问题,但我试图谷歌它,但无法找到一个满意的答案, public class Person { public string Name { get; set; } public int Age { get; set; } public Person(){} public Person(string name, int age) { Name = name; Age = age; } //Other properties, methods, events… } 我的问题是,如果我有这样的课程,创建一个对象的最佳方法是什么? Person p=new Person(“abc”,15) 要么 Person p=new Person(); p.Name=”abc”; p.Age=15; 这两种方法有什么区别,创建对象的最佳方法是什么?

使用NLog作为翻转文件记录器

如何 – 如果可能 – 我可以使用NLog作为翻转文件记录器吗? 仿佛: 我希望31天内最多可以有31个文件,当新的一天开始时,如果有一个旧日志文件##。log,那么它应该被删除但是在那一天所有的日志都会被附加,至少会在那里为期27天。

获取entity framework6在其下面的SELECT语句中使用NOLOCK

我在MVC 5项目中使用Entity Framework 6。 如您所知,如果我们在其中使用WITH (NOLOCK) ,则SQL Server中的SELECT查询执行速度更快,效率更高。 我查看了Entity Framework 6生成的一些SQL SELECT语句,并意识到它们都不包含NOLOCK。 我不想在我的提取操作中使用事务来读取未提交的事务。 如何在下面生成的SELECT语句中强制使用EF 6来使用NOLOCK?

ASP.NET中的会话超时警告

我有一个asp.net站点,当会话达到超时时我需要弹出/层/警报(比方说10分钟)。 弹出窗口将显示您的帐户会话将由于不活动而显示,并且具有用于继续会话的按钮或用于注销的按钮。 我在网上看到了不同的方法,但处理这个问题的最佳/正确方法是什么? 如果弹出窗口打开时间过长,是否需要额外超时?

c#中的XML字符串到DataTable

如何在c#中将XML字符串转换为DataTable? 我尝试了以下代码: public DataTable stam() { string xmlData = “abcd”; XElement x = XElement.Parse(xmlData); DataTable dt = new DataTable(); XElement setup = (from p in x.Descendants() select p).First(); foreach (XElement xe in setup.Descendants()) // build your DataTable dt.Columns.Add(new DataColumn(xe.Name.ToString(), typeof(string))); // add columns to your dt var all = from p in x.Descendants(setup.Name.ToString()) select p; […]

RenderTargetBitmap和Viewport3D – 质量问题

我想将一个3D场景从Viewport3D导出到位图。 显而易见的方法是使用RenderTargetBitmap – 但是当我这样做时,导出的位图的质量明显低于屏幕上的图像。 环顾四周,似乎RenderTargetBitmap没有利用硬件渲染。 这意味着渲染在第0层完成。 这意味着没有mip-mapping等,因此降低了导出图像的质量。 有谁知道如何以屏幕质量导出Viewport3D的位图? 澄清 虽然下面给出的示例没有显示这一点,但我最终需要将Viewport3D的位图导出到文件中。 据我所知,唯一的方法是将图像转换为从BitmapSource派生的东西。 下面的Cplotts显示使用RenderTargetBitmap提高导出质量可以改善图像,但由于渲染仍然在软件中完成,因此速度极慢。 有没有办法使用硬件渲染将渲染的3D场景导出到文件? 当然应该可以吗? 你可以看到这个xaml的问题: RenderTargetBitmap! 这段代码: private void Button_Click(object sender, RoutedEventArgs e) { RenderTargetBitmap bmp = new RenderTargetBitmap((int)viewport3D.ActualWidth, (int)viewport3D.ActualHeight, 96, 96, PixelFormats.Default); bmp.Render(viewport3D); rtbImage.Source = bmp; viewport3D.Visibility = Visibility.Collapsed; rtbImage.Visibility = Visibility.Visible; }