Tag: C#的

为什么我们不能locking值types?

我试图lock一个Booleanvariables,当我遇到以下错误: 'bool'不是locking语句所要求的引用types 似乎lock语句中只允许使用引用types,但我不知道为什么。 安德烈亚斯在他的评论中说 : 当[值types]对象从一个线程传递到另一个线程时,会创build一个副本,所以线程最终在两个不同的对象上工作,这是安全的。 这是真的吗? 这是否意味着当我执行以下操作时,实际上是修改xToTrue和xToFalse方法中的两个不同的x ? public static class Program { public static Boolean x = false; [STAThread] static void Main(string[] args) { var t = new Thread(() => xToTrue()); t.Start(); // … xToFalse(); } private static void xToTrue() { Program.x = true; } private static void xToFalse() { Program.x = false; […]

哪里可以findoff_ttypes的完整定义?

我使用TCP将文件从客户端发送到服务器。 要标记文件的结尾,我希望在实际数据之前发送文件大小。 所以我使用stat系统调用来查找文件的大小。 这是typesoff_t 。 我想知道它占用了多less字节,以便我可以在服务器端正确读取它。 它在<sys/types.h>定义。 但是我不明白这个定义。 它只是将__off_t or _off64_t定义为off_t 。 在哪里寻找__off_t ? 也是约定, __是头文件中的大部分事物的前缀,当我阅读头文件以更好地理解时,会吓到我。 如何更好地读取头文件? #ifndef __off_t_defined # ifndef __USE_FILE_OFFSET64 typedef __off_t off_t; # else typedef __off64_t off_t; # endif # define __off_t_defined #endif

如何写一个“等待”的方法?

我终于看到了asynchronous和等待关键字,这是我得到的,但所有我见过的例子调用.net框架中的asynchronous方法,例如这个调用HttpClient.GetStringAsync() 。 我不清楚的是这样一种方法,以及如何写我自己的“等待”的方法。 是不是像包装我想在任务中asynchronous运行的代码一样简单并返回?

PInvoke for C函数返回char *

我试图写一些C#代码调用一个非托pipeDLL的方法。 在dll函数的原型是: extern "C" __declspec(dllexport) char *foo(void); 在C#中,我第一次使用: [DllImport(_dllLocation)] public static extern string foo(); 它似乎在表面上工作,但在运行时收到内存损坏错误。 我想我指的是正确的记忆,但已经被释放了。 我尝试使用一个名为“P / Invoke Interop Assistant”的PInvoke代码gen实用程序。 它给了我输出: [System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")] public static extern System.IntPtr foo(); 它是否正确? 如果是这样,我该如何将此IntPtr转换为C#中的string?

将StringBuilder写入stream

写一个StringBuilder到System.IO.Stream的最佳方法是什么? 我现在在做: StringBuilder message = new StringBuilder("All your base"); message.Append(" are belong to us"); System.IO.MemoryStream stream = new System.IO.MemoryStream(); System.Text.ASCIIEncoding encoding = new ASCIIEncoding(); stream.Write(encoder.GetBytes(message.ToString()), 0, message.Length);

在C#中添加时间到date时间

我有一个日历和一个包含一天中的时间的文本框。 我想创build一个两者结合的date时间。 我知道我可以通过查看小时和分钟,然后将它们添加到日历date时间,但这似乎相当混乱。 有没有更好的办法?

为什么ConcurrentBag <T>在.Net(4.0)中很慢? 我做错了吗?

在开始一个项目之前,我写了一个简单的testing来比较来自(System.Collections.Concurrent)的ConcurrentBag相对于locking和列表的性能。 我感到非常惊讶的是,ConcurrentBag比locking一个简单的列表要慢10倍以上。 据我所知,当读者和作者是同一个线程时,ConcurrentBag效果最好。 但是,我没有想到它的性能会比传统的锁更糟糕。 我已经运行了一个testing,用两个Parallel for循环写入和从列表/包中读取。 但是,写本身就performance出巨大的差异: private static void ConcurrentBagTest() { int collSize = 10000000; Stopwatch stopWatch = new Stopwatch(); ConcurrentBag<int> bag1 = new ConcurrentBag<int>(); stopWatch.Start(); Parallel.For(0, collSize, delegate(int i) { bag1.Add(i); }); stopWatch.Stop(); Console.WriteLine("Elapsed Time = {0}", stopWatch.Elapsed.TotalSeconds); } 在我的盒子里,这需要3-4秒的时间才能运行,相比之下,这个代码是0.5 – 0.9秒: private static void LockCollTest() { int collSize = 10000000; object list1_lock=new […]

在MVC,C#中的每个请求运行一个方法?

在WebForm中,我们可以在MasterPage.cs中编写一个方法,并在每个请求中运行。 例如: MasterPage.cs ————– protected void Page_Load(object sender, EventArgs e) { CheckCookie(); } 我们如何在MVC中做这样的事情?

C ++ std :: unordered_map中使用的默认哈希函数是什么?

我在用 unordered_map<string, int> 和 unordered_map<int, int> 每种情况下使用什么散列函数,每种情况下碰撞的机会是多less? 我将分别插入唯一的string和唯一的int作为键。 我有兴趣知道散列函数在string和整型键以及它们的碰撞统计量的情况下的algorithm。

在C#中启动进程无需分心控制台窗口

我想知道如何启动一个过程。 但现在我的问题是控制台窗口(在这种情况下,7z)popup最前面阻止我的视野,并消除我的重点打扰我的句子或每隔几秒钟。 它非常烦人,我怎么防止发生。 我认为CreateNoWindow解决了,但它没有。 注:有时控制台需要用户input(replace文件或不)。 所以完全隐藏它可能是一个问题。 这是我现在的代码。 void doSomething(…) { myProcess.StartInfo.FileName = …; myProcess.StartInfo.Arguments = …; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start(); myProcess.WaitForExit(); }