小编Pet*_*old的帖子

条件运算符是否缓慢?

我正在查看一些带有巨大的switch语句和每个case的if-else语句的代码,并立即感受到优化的冲动.作为一个优秀的开发人员,我总是应该着手获得一些硬性时序事实,并从三个变体开始:

  1. 原始代码如下所示:

    public static bool SwitchIfElse(Key inKey, out char key, bool shift)
    {
        switch (inKey)
        {
           case Key.A: if (shift) { key = 'A'; } else { key = 'a'; } return true;
           case Key.B: if (shift) { key = 'B'; } else { key = 'b'; } return true;
           case Key.C: if (shift) { key = 'C'; } else { key = 'c'; } return true;
           ...
           case Key.Y: if (shift) { key = 'Y'; } else { key …
    Run Code Online (Sandbox Code Playgroud)

c# performance if-statement conditional-operator micro-optimization

25
推荐指数
2
解决办法
5615
查看次数

如何使用Azure ACS将所需声明传递给OpenID身份提供程序?

查看Azure ACS生成的请求URL时,我可以看到ACS包含电子邮件,全名,名字和姓氏作为所需声明.此外,fullname属性映射到http://axschema.org/namePerson声明类型.

现在我已将MyOpenID添加为身份提供者.MyOpenID无法识别axschema声明,但我已成功http://schema.openid.net/namePerson从MyOpenID中检索到.

但问题是,即使我将http://schema.openid.net/namePerson声明作为与ACS中的MyOpenID声明发布者相关的规则添加,声明也不会包含在ACS生成的请求URL中.

是否有任何(隐藏)方法来配置要求此声明的请求?或者甚至更好,更改内置映射以使用schema.openid.net/namePerson类型而不是axschema.org/namePerson

accesscontrolservice azure appfabric azure-appfabric acs

24
推荐指数
1
解决办法
641
查看次数

LGPL许可库

我已经阅读了LGPL许可证,但它非常复杂,我无法找到问题的答案.

我想在我的项目中使用LGPL库.LGPL库中不会进行任何更改.该项目是注册用户使用的网站应用程序.注册用户不需要使用该网站.

所以我的问题是我可以在这种情况下使用LGPL库吗?

licensing lgpl

22
推荐指数
2
解决办法
6803
查看次数

绑定到数据网格中的命令

我在WPF应用程序中使用MV-VM模式.我将ViewModel绑定到ContentControl并使用窗口资源中定义的数据模板来呈现该ViewModel的视图(UserControl).

在ViewModel中,我有一组项目.我将该集合绑定到WPF工具包中提供的数据网格.同样在视图模型中,我定义了一个RemoveItem命令,该命令接受要删除的项ID的参数.

如何在数据网格中绑定该命令?网格的数据上下文就是那个集合,所以类似于:

<Button Command="{Binding Path=RemoveCommand}" CommandParameter="{Binding Path=id}">X</Button>
Run Code Online (Sandbox Code Playgroud)

不起作用 - 它找不到命令.我想我需要做RelativeSource绑定,但那会是什么样子?Ancestor类型是UserControl还是ContentControl?我的ViewModel作为DataContext驻留在哪里?

还是我离开这里?

.net data-binding wpf mvvm

18
推荐指数
1
解决办法
1万
查看次数

使用Autofac管理NHibernate ISession

有没有人有关于Autofac如何帮助管理NHibernate ISession实例的任何提示或最佳实践(在ASP.NET MVC应用程序的情况下)?

nhibernate autofac

16
推荐指数
1
解决办法
7480
查看次数

考虑C#中的"一次性"关键字

您对如何在.Net中实施一次性物品有何看法?你如何解决实现IDisposable类的重复性?

我觉得IDisposable类型不是他们应该去过的一流公民.太多是由开发人员的怜悯.

具体来说,我想知道是否应该在语言和工具方面提供更好的支持,以确保一次性物品的正确实施和妥善处理.

例如,在C#中,如果需要实现一次性语义的类可以像这样声明:

public class disposable MyDisposableThing
{
    ~MyDisposableThing()
    {
        // Dispose managed resources
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器可以轻松生成IDisposable接口的实现.析构函数~MyDisposableThing可以转换为应该释放托管资源的实际Dispose方法.

中间C#代码如下所示:

public class MyDisposableThing : IDisposable
{
    private void MyDisposableThingDestructor()
    {
        // Dispose my managed resources
    }

    ~MyDisposableThing()
    {
        DisposeMe(false);
    }

    public void Dispose()
    {
        DisposeMe(true);
        GC.SuppressFinalize(this);
    }

    private bool _disposed;
    private void DisposeMe(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // Call the userdefined "destructor" 
                MyDisposableThingDestructor();
            }
        }
        _disposed = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以实现更清晰的代码,更少的样板处理代码以及处理托管资源的一致方式.对于边缘情况和非托管资源,仍然支持手动实现IDisposable.

确保实例得到妥善处理是另一项挑战.请考虑以下代码:

private string ReadFile(string filename)
{ …
Run Code Online (Sandbox Code Playgroud)

c# language-features design-patterns idisposable

13
推荐指数
3
解决办法
5631
查看次数

Log4Net和从并行实例记录

我在我的项目中使用log4net,有一个问题.该程序的主要功能需要很长时间,我使用日志记录来保存有关它的信息.我使用FileAppender将日志保存到文件.

我的应用程序位于共享(本地)文件夹中,可能有多个应用程序实例从一个路径运行.在这种情况下,我只能从第一个程序记录信息,我的应用程序的其他实例无法记录信息,因为日志文件已被锁定.

当我使用"log4net.Appender.FileAppender + MinimalLock"选项时,会出现信息丢失的情况.并非所有来自两个实例的日志都保存到文件中.

如何从并行实例中解决此问题和日志信息?当我使用"MinimalLock"选项时性能下降呢?

谢谢.希望得到你的帮助.

parallel-processing logging log4net fileappender

11
推荐指数
1
解决办法
8135
查看次数

如何在ExecutionContext中包含自己的数据

我知道当你通过调用BeginInvoke()或ThreadPool.QueueUserWorkItem(...)并行运行某个方法时,.NET框架正在捕获包含代码访问安全信息和其他一些东西的ExecutionContext对象.

我想要的是在ExecutionContext中包含我的并行方法所需的一些数据,但也必须在排队任务时捕获.

问题是我并不总是能控制创建此并行任务的代码,所以我必须找到一种方法来存储这些数据,然后再调用这个外部代码.这就是为什么我想到ExecutionContext类.

当我并不总是控制在线程之间分割工作的代码时,有没有办法将某个状态传递给并行任务.

.net multithreading

9
推荐指数
1
解决办法
2232
查看次数

log4net是否支持在日志消息中包含调用堆栈

我希望在log4net消息中包含调用堆栈(例如,调用我的方法).有这样做的标准方法吗?

(我知道这会很慢,但我只需要做一些错误)

.net debugging log4net

8
推荐指数
1
解决办法
1万
查看次数

如何使用私钥加密字符串并使用公钥解密?

我从不使用加密库,但我想用私钥加密字符串并通过公钥解密.如何在c#中实现这一点.请帮我一个小代码片段.谢谢

c# encryption

8
推荐指数
1
解决办法
1万
查看次数