小编JRo*_*han的帖子

具有现有目录结构的Git子目录过滤器

我正在使用filter-branch的--subdirectory-filter选项拆分Git存储库,除了它将所有东西都拉到存储库的根目录之外,它工作得很好.

我现在有

ABC
  - DEF
      - GHI
      - JKL
  - MNO
Run Code Online (Sandbox Code Playgroud)

以及此命令的结果:

git filter-branch -f --subdirectory-filter ABC/DEF --prune-empty -- --all
Run Code Online (Sandbox Code Playgroud)

生成这个:

GHI
JKL
Run Code Online (Sandbox Code Playgroud)

我真正想要的是这个:

ABC
  - DEF
      - GHI
      - JKL
Run Code Online (Sandbox Code Playgroud)

我在Git文档中看不到任何显示过保留(或设置)目录结构的过滤器选项的内容,我无法找到一个命令,我可以过滤后重新运行结构到我想要的状态.

这可能吗?

git git-filter-branch

13
推荐指数
1
解决办法
2542
查看次数

为什么.NET应用程序中未使用的物理线程数会出现波动?

我有一个.NET应用程序,我希望有5个长时间运行的线程,包括主线程.我可以看到确实在代码库中新增了4个线程,我相信在任何地方都没有直接(例如工作项排队/任务)或间接(例如计时器)使用ThreadPool.至少我找不到任何东西.

在性能监视器下运行应用程序会显示已识别线程的数量保持不变为5(正如我所料),但物理线程数在大约一小时内波动在70到120之间!

有谁知道为什么有这么多未使用的(据我所知)物理线程?为什么这个数字会波动?

我找不到任何可以解释这种行为的文档,所以我最好的猜测是ThreadPool能够平衡自身,以适应不断变化的环境因素,如空闲内存和资源争用,但这里的数字似乎过多.

更新

微软的一位高级支持工程师证实,正在使用的物理线程计数器肯定只报告当前进程的线程,尽管MSDN中有一些奇怪的措辞.如果答案表明情况并非如此,则需要指向一个明确的来源.

.net c# multithreading

8
推荐指数
2
解决办法
1033
查看次数

停止Autofac模块注册已注册的组件

我有一个Autofac模块,在负载覆盖中具有以下(修剪)逻辑:

protected override void Load(ContainerBuilder builder)
    {
        foreach (var componentType in allTypesInAllAvailableAssemblies) // Set elsewhere
        {
            var handlerInterfaces = componentType.GetInterfaces().Where(i => i.IsClosedTypeOf(typeof(IMessageHandler<>)));
            if (handlerInterfaces.Any())
                builder.RegisterType(componentType).As(handlerInterfaces);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是寻找任何声明自己的消息处理程序并将其注册到它实现的所有IMessageHandler接口的类.

我想要做的是,如果组件已经注册,则不注册该组件.作为奖励,如果我可以更新现有注册以解决消息处理程序接口(如果尚未解决),那将是理想的.

为了参数,可以假设此代码将所有其他类型已注册运行(包括可能的消息处理程序候选)

我过去曾使用AttachToComponentRegistration覆盖进行注册操作,但在这种情况下看起来并不像它有用.

这是可能的还是我应该重新考虑我的设计并强制插件明确声明他们的处理程序?

c# autofac

6
推荐指数
1
解决办法
6571
查看次数

Convert.ChangeType 可以在未经检查的上下文中运行吗?

我有一个有效的自定义消息传递协议的反序列化类。此类使用反射来检查类的属性和协议映射的属性。除非该值是无符号整数(32 或 64)并且被转换为整数(32 或 64),否则这工作正常。

我可以测试(例如if x is int)属性类型并为这些数字类型分支代码以在块中执行强制转换unchecked,但我宁愿保持代码简单并找到一种使用现有Convert.ChangeType(value, convertToType)逻辑的方法。有没有办法让这个转换器忽略数字溢出?或者是否有其他方法可以使用仅在运行时已知的类型进行转换?

注意:我意识到这里有一个需要修复的根本原因,但我们目前无法更改数据源、传输类型或消息传递协议。

c# reflection casting

5
推荐指数
1
解决办法
484
查看次数

如何为ObservableCollections的线程亲和性编写失败的测试

我有一个线程安全的可观察集合替代品,我想为其编写单元测试。为了避免误报,我试图编写一个多线程测试,以证明不能将对象添加到ObservableCollection <>中而不会失败,因此我可以将其与我交换并观察它变为绿色。我只是无法使此测试失败(使用NUnit)。

到目前为止,我没有尝试过任何特定的顺序:

  • 在其他线程上创建集合并在当前线程上进行更新
  • 在当前线程上创建集合,并在备用线程上更新
  • 使用不同的线程机制
    • 线程启动
    • 调度员
    • 后台工作者
  • 使用不同的公寓状态
    • 测试本身和/或一个或两个线程上的STA和MTA的所有组合
  • 创建一个WPF窗口来保存集合并手动操作Dispatcher框架以模拟运行时环境。

自定义集合本身可以在真实代码中正常工作,因此,这现在比任何事情都更像是一项学术活动。我的线程信心已经动摇了:)

c# wpf multithreading observablecollection

2
推荐指数
1
解决办法
279
查看次数