使用Parallel.ForEach或Task.Run()以异步方式启动一组任务有什么区别?
版本1:
List<string> strings = new List<string> { "s1", "s2", "s3" };
Parallel.ForEach(strings, s =>
{
DoSomething(s);
});
Run Code Online (Sandbox Code Playgroud)
版本2:
List<string> strings = new List<string> { "s1", "s2", "s3" };
List<Task> Tasks = new List<Task>();
foreach (var s in strings)
{
Tasks.Add(Task.Run(() => DoSomething(s)));
}
await Task.WhenAll(Tasks);
Run Code Online (Sandbox Code Playgroud) 我有一组位模式,并希望找到集合中与给定输入匹配的元素的索引.位模式包含"不关心"位,即x-es,它匹配0和1.
示例 位模式集是
index abcd
0 00x1
1 01xx
2 100x
3 1010
4 1x11
Run Code Online (Sandbox Code Playgroud)
然后,尝试匹配0110应返回索引1和1011应返回索引4.
如何通过元素线性搜索更快地解决这个问题?我想可以制作一种二叉树,但是,创建这样一棵树的智能方法是什么?是否存在针对此类问题的其他有效数据结构/算法,主要是在查询效率和存储要求方面.
我有两种不同的情况需要解决这个问题
更新 x-es更有可能出现在某些位位置,也就是说,某些位位置将由x-es支配,而其他位将主要为零/ 1.
在深度C#中建议的单例模式实现是
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
Run Code Online (Sandbox Code Playgroud)
ReSharper建议使用auto属性和C#6自动属性初始化器简化它:
public sealed class Singleton
{
static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance { get; } = new Singleton();
}
Run Code Online (Sandbox Code Playgroud)
这确实看起来更简单.使用这种简化有不足之处吗?
很多时候在调试我的(WinForms)应用程序时遇到断点,Visual Studio会在10-20秒内无响应,我在右下角看到以下消息Visual Studio正忙:Microsoft Visual studio正在等待内部操作完成.每次发生时,我都会看到Visual Studio Standard Collector正在使用大量的CPU.任何人都可以告诉我这个标准收藏家是什么,以及是否有办法避免这种情况发生?这是在Windows 10,VS Community 2015 Update 1上.
async Tasks 的调度不像我在TPL Dataflow中预期的那样工作.在下面的示例中,我希望ActionBlock尽快处理数据TransformBlock.但它正在等待第二个(延迟)结果,然后才进入第三个结果.我在这里误解了什么?处理顺序是否有一些要求?
public class TestDataFlow
{
public System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
public async Task Flow()
{
watch.Start();
var plus10 = new TransformBlock<int, int>(async input =>
{
if (input == 2)
{
await Task.Delay(5000);
}
Console.WriteLine("Exiting plus10 for input {0} @ {1}", input, watch.Elapsed);
return input + 10;
},
new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = 4,
});
var printSolution = new ActionBlock<int>(input =>
{
Console.WriteLine("Solution: {0} @ {1}", input, watch.Elapsed.TotalMilliSeconds);
},
new ExecutionDataflowBlockOptions
{ …Run Code Online (Sandbox Code Playgroud) 我将在我的 C# 项目中引入 StyleCop,并且似乎有多种方法可以做到这一点。检查 NuGet 我可以看到 StyleCopPlus.MSBuild(似乎没有被积极开发)、StyleCop、StyleCop.Analyzers,它们似乎都将 StyleCop 引入项目。还有一个 StyleCop Visual Studio 扩展和一个 Resharper 的 StyleCop 扩展。
有推荐的方法吗?应该积极开发一个好的解决方案并支持新的语言特性。
我正在处理 LightGbm(Scikit-learn API)中的二进制分类问题,并且在理解如何包含样本权重时遇到问题。我的代码目前看起来像这样
classifier = LGBMClassifier(n_estimators=100, learning_rate = 0.1, num_leaves = 15)
classifier.fit(X_train, y_train, sample_weight = w_train, eval_set = (X_val, y_val))
Run Code Online (Sandbox Code Playgroud)
这w_train是一个与 y_train 维度相同的 numpy 数组。但是我需要 LightGbm 在验证集上也使用 sample_weights,所以我eval_sample_weight在fit函数中设置。我希望这也是一个数组w_val(与 具有相同的维度y_val),但我从文档中看到这是一个数组列表。我找不到任何使用它的例子,所以我很难理解为什么。据我了解,这应该只是验证集中每个元素的权重。数组列表:这是否意味着每个样本有多个权重?谁能解释一下?
当为我的项目中的方法运行 BenchmarkDotNet 时,我在屏幕上打印了一些“错误的程序集绑定重定向”警告/错误消息。这让我有点困惑,因为我认为程序集绑定重定向是一个 .Net Framework 概念,而我的项目是 .Net Core 3.0。谷歌搜索警告/错误消息没有结果。有关这些消息的含义以及可能如何解决问题的任何提示。我尝试清理 Nuget 缓存、恢复 Nuget 包、清理和重建解决方案,但没有任何帮助。
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 308100.00 ns, 308.1000 us/op
// Wrong assembly binding redirects for System.Data.Common.resources, Version=4.2.1.0, Culture=en-US, PublicKeyToken=b03f5f7f11d50a3a.
// Wrong assembly binding redirects for System.Data.Common.resources, Version=4.2.1.0, Culture=en, PublicKeyToken=b03f5f7f11d50a3a.
// Wrong assembly binding redirects for System.Data.SqlClient.resources, Version=4.6.0.0, Culture=en-US, PublicKeyToken=b03f5f7f11d50a3a.
// Wrong assembly binding redirects for …Run Code Online (Sandbox Code Playgroud) 我有一个清单,例如
List<int> List1 = new List<int>{1, 5, 8, 3, 9};
Run Code Online (Sandbox Code Playgroud)
重复列表中的元素以获得{1,1,5,5,8,8,3,3,9,9}的简单方法是什么?
我需要这个的原因是我正在绘制列表中的元素并需要制作一个"步骤图".