Tag: .net

C#中的字符串不变性

我很好奇StringBuilder类是如何在内部实现的,所以我决定查看Mono的源代码并将其与Reflector的反汇编代码进行比较。 从本质上讲,Microsoft的实现使用char[]在内部存储字符串表示,并使用一堆不安全的方法来操作它。 这很简单,没有提出任何问题。 但当我发现Mono在StringBuilder中使用一个字符串时,我很困惑: private int _length; private string _str; 第一个想法是:“多么无谓的StringBuilder”。 但后来我发现可以使用指针改变字符串: public StringBuilder Append (string value) { // … String.CharCopy (_str, _length, value, 0, value.Length); } internal static unsafe void CharCopy (char *dest, char *src, int count) { // … ((short*)dest) [0] = ((short*)src) [0]; dest++; src++; } 我曾经在C / C ++中编程一点,所以我不能说这段代码让我很困惑,但我认为字符串是完全不可变的(即绝对没有办法改变它)。 所以实际的问题是: 我可以创建一个完全不可变的类型吗? […]

使用Microsoft .NET图表控件库生成图像,无需控制

是否可以使用Microsoft Chart Controls库生成图像(jpeg,png等)而无需实例化WinForm或ASP.NET Control类? 我见过的所有例子都使用了控制组件。 我需要创建一个包含简单方法的库,这些方法可以绘制数据并返回一个新的图表图像。 例子: public byte[] GeneratePlot(IList series) { // generate and return JPEG } public void GeneratePlot(IList series, Stream outputStream) { // generate JPEG and write to stream } 如果不可能: 你会建议每次用户调用GeneratePlot()方法时创建/处理新的图表控件吗? 你会推荐另一个.NET库(最好是免费的)吗? 谢谢

服务需要检测工作站是否已锁定,并且屏幕保护程序处于活动状态

我正在开发一项服务,需要检测登录到单台机器的所有用户的用户状态。 具体来说,我想检查屏幕保护程序是否处于活动状态以及其会话是否已锁定。 此代码将在系统级服务下运行,并且没有可见的UI,因此可以排除多个选项(捕获WM消息等)。 除了正常的工作站之外,我还希望能够在有多个用户登录的终端服务器上工作。 由于这些要求,我想知道是否需要涉及多个Win32 API。 关于从哪里开始的任何想法?

Rx中可推进的历史流和直播

我有一个热门观察,我通常使用下面的普通Subject实现,以便有兴趣的人可以订阅实时的通知流。 现在我想保留这个实时流,但是还要公开所有事件的历史流,这些事件已经并且具有绝对时间附加到那些通知以了解它们究竟发生的时间因为允许订户将历史流推进到任何在重播年表之前的时间点。 我相信大部分可以使用HistoricalScheduler及其AdvanceTo方法实现,但我不确定如何? 是否使用Timestamped来节省所需事件的时间? ReplaySubject是否需要将实时流缓存到历史记录中,然后可以使用HistoricalScheduler进行回放? 如何为同一来源实施这两个流,或者换句话说,如何将下面的内容用于当前的要求? [见“重播过去”标题]

C#中具有最低内存占用的最快串行器和解串器?

我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象以便在我的LAN周围发送。 我最近从2.0升级到.NET 3.5。 3.5有没有引入任何新类型来提高序列化性能? 我已经查看了DataContractSerializer ,但是它将任何内容序列化为基础XML …这必须增加内存占用。 什么是通过LAN发送对象的最快串行器? 我不关心互操作或版本控制…… 我需要速度! 我对第三方开源替代品持开放态度。

如何防止我的代码被盗?

当我启动.NET exe时会发生什么? 我知道C#被编译为IL代码,我认为生成的exe文件只是启动运行时并将IL代码传递给它的启动器。 但是怎么样? 它的过程有多复杂? IL代码嵌入在exe中。 我认为它可以从内存中执行而无需将其写入磁盘,而普通的exe不是(好的,是的,但它非常复杂)。 我的最终目标是提取IL代码并编写我自己的加密启动器,以防止scriptkiddies在Reflector中打开我的代码并轻松窃取我的所有类。 好吧,我无法完全阻止逆向工程。 如果他们能够检查内存并抓住我将纯IL传递给运行时的那一刻那么无论是否是.net exe都没关系,是吗? 我知道有几个混淆器工具,但我不想弄乱IL代码本身。 编辑:所以似乎不值得尝试我想要的东西。 无论如何他们都会破解它……所以我会寻找一个混淆工具。 是的,我的朋友也说,将所有符号重命名为无意义的名称就足够了。 毕竟逆向工程并不那么容易。

C#潜在面试问题……太难了?

如果不运行此代码,请确定将调用哪个Foo方法: class A { public void Foo( int n ) { Console.WriteLine( “A::Foo” ); } } class B : A { /* note that A::Foo and B::Foo are not related at all */ public void Foo( double n ) { Console.WriteLine( “B::Foo” ); } } static void Main( string[] args ) { B b = […]

如何获取System DateTime格式?

我正在寻找获得系统日期时间格式的解决方案。 例如:如果我得到DateTime.Now ? 使用哪个日期时间格式? DD/MM/YYYY等

如何在安装时(或在编译时轻松)配置Windows服务的名称?

我用C#创建了一个Windows服务,将它安装在服务器上运行正常。 现在我想再次安装相同的服务,但是从不同的工作目录运行,具有不同的配置文件等。因此,我希望同时运行同一服务的两个 (或更多)实例。 最初,这是不可能的,因为安装程序会抱怨已经安装了给定名称的服务。 我可以通过更改我的代码,将ServiceBase.ServiceName属性设置为新值,然后重新编译并再次运行InstallUtil.exe来解决此问题。 但是,我更喜欢我是否可以在安装时设置服务名称,即理想情况下我会做类似的事情 InstallUtil.exe / i / servicename =“MyService Instance 2”MyService.exe 如果这是不可实现的(我非常怀疑),我希望能够在构建服务时注入服务名称。 我认为有可能使用某种构建事件,使用聪明的msbuild或nant技巧或类似的东西,但我没有线索。 任何建议将不胜感激。 感谢您的时间。

如何使用Entity framework 5和MVC 4创建审计跟踪

我正在使用EF 5构建MVC 4应用程序。我需要执行审计跟踪,即记录最终用户所做的任何更改。 我已经问了几次这个问题,但之前没有真正得到满意的答案。 所以我希望在某个地方添加更多细节…… 目前我有多个存储库 即 public class AuditZoneRepository : IAuditZoneRepository { private AISDbContext context = new AISDbContext(); public int Save(AuditZone model, ModelStateDictionary modelState) { if (model.Id == 0) { context.AuditZones.Add(model); } else { var recordToUpdate = context.AuditZones.FirstOrDefault(x => x.Id == model.Id); if (recordToUpdate != null) { recordToUpdate.Description = model.Description; recordToUpdate.Valid = model.Valid; recordToUpdate.ModifiedDate […]