Tag: c# 4.0

并行地以顺序方式执行N个线程

我有一个应用程序,我有1个大文件的1000多个小部分。 我必须一次上传最多16个零件。 我使用.Net的Thread并行库。 我使用Parallel.For来划分多个部分并分配1个应该为每个部分执行的方法,并将DegreeOfParallelism设置为16。 我需要使用由不同部分上传生成的校验和值执行1方法,因此我必须设置某些机制,我必须等待所有部件上传说1000完成。 在TPL库中,我面临的问题是它是从1000中随机执行16个线程中的任何一个。 我想要一些机制,我可以在最初运行前16个线程,如果第一个或第二个或任何16个线程完成其任务,则应该启动第17个部分。 我怎样才能做到这一点?

从同一个类中的另一个构造函数调用构造函数

我有一个带有两个构造函数的类(C#)。 这是代码片段: public class FooBar() { public FooBar(string s) { // constructor 1, some functionality } public FooBar(int i) : this(“My String”) { // constructor 2, some other functionality } } 是的,我知道我可以使用上面提到的方法从另一个构建器调用一个构造函数。 但是在这种情况下,如果我调用构造函数2,构造函数1中的所有语句都将在执行构造函数2中的语句之前运行。 我想要的是在运行构造函数2中的所有语句之后,它将调用构造函数1。 在我的确切情况下,我正在进行用户身份validation。 构造函数1仅使用用户ID检索用户信息,但构造函数2使用电子邮件和密码进行用户身份validation。 如果用户在数据库中,它将获取用户ID,现在我希望构造函数1填充该类的所有属性。 如果您需要更多信息,请与我们联系。 如果您认为还有其他更好的方法,我很乐意听取您的建议。 更新1:我想知道为什么这样的事情没有实现: public FooBar(bool b) { // constructor 3, some more functionality this.FooBar(“My String”); // calling constructor […]

如何绕过Marshal.Copy(32位)长度限制?

我正在尝试在托管(C#)和非托管(C ++ Win32)代码之间来回移动数据。 我可以使用Marshal.Copy ,它可以正常运行,直到数据集大于2GB,因为Marshal.Copy有一个带符号的32位int(2GB)长度限制。 知道怎么解决这个问题吗? 目前我在托管端使用AllocHGlobal(IntPtr) .ToPointer() ,在非托管端使用AllocHGlobal(IntPtr) 。 如果我不能使用Marshal.Copy来回移动大数据(> 2GB)我可以使用什么?

从值获取键 – Dictionary <string,List >

我通过指定值来获取密钥时遇到问题。 我能做到这一点的最佳方式是什么? var st1= new List { “NY”, “CT”, “ME” }; var st2= new List { “KY”, “TN”, “SC” }; var st3= new List { “TX”, “OK”, “MO” }; var statesToEmailDictionary = new Dictionary<string, List>(); statesToEmailDictionary.Add(“test1@gmail.com”, st1); statesToEmailDictionary.Add(“test2@gmail.com”, st2); statesToEmailDictionary.Add(“test3@gmail.com”, st3); var emailAdd = statesToEmailDictionary.FirstOrDefault(x => x.Value.Where(y => y.Contains(state))).Key;

空指针测试性能

测试C#中的引用类型变量是否为空指针(如if (x == null) …)与测试小于零的整数或甚至bool为false相比,性能如何? 关于此类空指针测试是否还有其他问题,例如是否生成了garbadge ? 我为游戏的每一帧做了数百次这些测试,我想知道这些是否会导致问题或者能否更有效地实施?

TlbExp.exe错误:此程序集由运行时更新版本构建

我们将服务器的一部分移动到.net 4.0。 我们已经向Vs2010迈进了第一步,但没有改变任何项目的目标框架。 作为第二步,我将服务器的特定部分移动到目标4.0,以便我们可以使用一些新function。 我在针对4.0的类库DLL上调用TLBexp.exe时遇到问题。 此DLL还引用了许多以2.0为目标的DLL。 我收到错误:TlbExp:错误TX0000:无法加载文件或程序集’file:Library.dll’或其依赖项之一。 此程序集由比当前加载的运行时更新的运行时构建,无法加载。 我正在调用随附的TLBExp:Microsoft SDKs \ Windows \ v7.0A \ bin \在我在VS2010命令提示符中调用的命令中,我引用了v4.0.30319二进制文件(例如mscorlib.tlb) 是否在允许引用2.0库的4.0 DLL上运行TLB? 如果是,那么我收到此错误的任何原因。 这是我使用的确切命令调用:“C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ tlbexp.exe”/ silent / win32 / tlbreference:“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.tlb“/tlbreference:”C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.tlb”/ tlbreference:“C:\ Windows \ Microsoft.NET \ Framework \ […]

重新编译引用的程序集时不变的常量值

我在汇编中有这个代码: public class Class1 { public const int x = 10; } 在我有一个不同的集会: class Program { static void Main(string[] args) { Console.WriteLine(Class1.x); Console.ReadKey(); } } 当然输出是10 ,但后来我把x改为20 : public class Class1 { public const int x = 20; } 我重新编译了程序集并将其移动到我的命令行程序的bin目录中。 但是,我的程序输出仍然是10 ,直到我编译包含main函数的程序集。 为什么会这样?

我可以用这种方式为所有派生的单身人士定义一个抽象类吗?

这是我的抽象类,每次我想创建一个Singleton时都必须派生它: public abstract class Singleton where T : Singleton { private static readonly Lazy _instance = new Lazy(() => { var constructor = typeof(T).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[0], null); return (T)constructor.Invoke(null); }); public static T Instance { get { return _instance.Value; } } public Singleton() { } } 所以,每次我需要遵循Singleton设计模式时,我可以这样做: sealed class Server : Singleton […]

为什么IEquatable T在T#4.0中没有逆变?

IEquatable 可能已被声明为T中的逆变,因为它仅在输入位置使用T(或者,等效地,U是T的子类型应该暗示IEquatable 是[IE的一个子类] IEquatable )。 那么,为什么BCL团队没有使用’in’关键字对它进行注释(对于C#4.0),因为它们与许多其他通用接口(如完全类似的IComparable)一样?

在selenium c#中的下拉列表中截取选项

我想使用selenium c#捕获下拉列表中显示的选项的屏幕截图,就像下面显示的图像一样。 我尝试了多种方法来截取屏幕截图。 基本上我要扩展元素的下拉列表以捕获屏幕截图。 这就是我所做的 //#1 var element = Driver.FindElement(By.Id(“carsId”)); Actions builder = new Actions(Driver); builder.SendKeys(element, Keys.LeftAlt + Keys.Down).Build().Perform(); //#2 Actions act = new Actions(Driver); act.MoveToElement(element).Build().Perform(); 当我在网站上完成但没有通过selenium工作时,按下Alt + Down键的第一个实现工作。 第二个实现也不起作用。 我也尝试过builder.ClickAndHold()方法。 我在这里还有另一个问题。 是否真的有可能selenium点击并扩展一段时间,直到抓住屏幕? 任何帮助将不胜感激。