Tag: multithreading

如何测试线程安全

您对如何测试multithreading应用程序有什么建议吗? 我知道,线程错误很难捕获,它们可能随时发生 – 或者根本不发生。 测试很困难,结果永远不会确定。 当然最好仔细设计和编程并发模块。 尽管如此 – 我不想忽略测试方面。 因此,运行大量同时处理相同项目的线程有时会调用线程错误。 任何想法或最佳实践,以获得隐藏线程错误的高命中率? (我正在使用.Net / C#)

什么是Interlocked.Increment实际上在做什么?

Interlocked.Increment似乎是在multithreading代码中需要执行的最标准/最简单的操作之一。 我假设该方法的function是一种排序模式,任何具有线程经验的人都能够复制。 所以基本上我想知道的是,如果有人可以提供Interlocked.Increment方法实际内部执行的完全重复(解释它是如何工作的)? (我已经找到了实际方法的来源但却无法找到它)

线程会自动关闭吗?

我使用gmail类,以便我的应用程序可以通过Gmail发送通知。 它是这样做的: public static void SendMessage(string message) { Notification.message = message; Thread t = new Thread(new ThreadStart(SendMessageThreaded)); t.Start(); } 并且线程函数看起来像这样: private static void SendMessageThreaded() { try { if (Notification.message != “”) RC.Gmail.GmailMessage.SendFromGmail(“accname”, “accpass”, “email”, “subject”, Notification.message); Notification.message = “”; } catch { } } 因此,在运行SendMessageThreaded之后,它会自行关闭还是必须关闭 t.Start() t.Abort() 或者其他的东西?

限制线程计数

我有一个列表,其中包含我要下载的项目。 我使用for循环来迭代列表。 对于此List中的每个项目,我启动一个引用该项目的新线程。 我的问题是我想要同时限制maxDownload。 for (int i = downloadList.Count – 1; i >= 0; i–) { downloadItem item = downloadList[i]; if (item.Status != 1 && item.Status != 2) { ThreadStart starter = delegate { this.DownloadItem(ref item); }; Thread t = new Thread(starter); t.IsBackground = true; t.Name = item.Name; t.Priority = ThreadPriority.Normal; t.Start(); } } 我读了一些关于ThreadPool的内容,但后来我无法引用我的项目。 […]

使用WPF在线程中加载图像

我正在尝试制作一个显示来自互联网图片的列表框。 这些项目是通过将itemsource绑定到包含图像URL和其他一些属性(title,desc等等)的模型来提供的。 不幸的是,列表加载速度非常慢,因为WPF在显示列表之前尝试从Web下载所有图片,并使应用程序冻结15到25秒。 我已经读过我应该在另一个post中加载图片,但我不知道应该在哪里做以及如何做? 是否更好地直接在模型中加载所有图片(通过仅为此创建一个线程池 – 但问题是它不是模型/模型视图的真正部分)或者更好地创建一个将直接更新的后台线程列表何时有数据? 谢谢 !

限制一次执行方法的线程数

我们希望限制应用程序可以对其应用程序服务器进行的并行请求的数量。 我们有可能运行100多个后台线程,它们希望在某些时候调用应用程序服务器,但只希望5个线程能够在任何时候调用SendMessage()(或任何方法)。 实现这一目标的最佳方法是什么? 我曾考虑使用某种类型的网守对象来阻止进入该方法的线程,直到在其中执行的线程数已经降到阈值以下。 这是一个合理的解决方案还是我忽略了这可能是脏/危险的事实? 我们正在使用C#.NET 3.5进行开发。 谢谢, 史蒂夫

如何使用.NET中的多个并发线程来衡量代码块(线程)执行时间

现在我们只是使用这样的东西 stopWatch.Start(); try { method(); } finally { stopWatch.Stop(); } 哪种方法适用于同步方法,但有些方法是异步执行的,因此在执行多个线程时时间会有所偏差。 是否有相当于System.Diagnostics.Stopwatch,它只测量当前线程的时间花费? 我们希望在我们的内部beta(alpha?)版本中长时间收集数据,并且在分析器全时运行不是一个可行的选择。 编辑:为了澄清,我们只想测量执行method()所花费的时间,所以如果Method1()和Method2()都同时启动而Method1在2秒标记处完成,而Method2在4秒标记处完成,我想要的东西可以告诉我,Method1花了大约1秒钟执行,而Method2花了大约3秒钟执行(假设在前2秒内他们平均共享(假设单核)处理器。

Lucene.Net写/读同步

我可以将(使用IndexWriter )新文档写入索引,同时打开它来读取(使用IndexReader )吗? 或者我必须在写作前仔细阅读? 我是否可以在打开IndexWriter使用IndexWriter在索引中读取/搜索文档(使用IndexReader )? 或者我必须在阅读前结束写作吗? Lucene.Net线程安全与否? 或者我必须自己写吗?

你如何从ASP.NET发送大量电子邮件?

我为客户建立了一个网站,他们想要一个自定义的时事通讯工具。 构建工具很简单,但我不确定如何发送电子邮件。 我设置了一个测试页面,并设法使用System.Net.Mail命名空间向我自己发送测试电子邮件。 我尝试将此代码应用于简报页面上的循环,但结果却是一项相当困难的任务。 电子邮件发送循环在发送电子邮件时将整个站点锁定大约一个小时。 有时它会中途中止循环,一些电子邮件将不会被发送。 我尝试在另一个线程上启动循环。 protected void btnSendNewsletter_Click(object sender, EventArgs e) { Thread t = new System.Threading.Thread(new ThreadStart(SendEmails)); t.Start(); } 但这仍然使网站变得缓慢,并且还有一种中途流产的习惯。 发送群发电子邮件的常用方法是什么? 我敢肯定我做得不对。 我对.NET中的电子邮件领域非常陌生,因此非常感谢任何帮助。

C#在自己的线程中执行的线程之间的事件(如何)?

我想要两个主题。 我们打电话给他们: 线程A. 线程B 线程A触发事件,线程B侦听此事件。 执行线程B事件侦听器时,它是使用线程A的线程ID执行的,所以我猜它是在线程A中执行的。 我想做的是能够向线程B发起事件,例如:“嘿,数据已准备就绪,你现在可以处理它”。 此事件必须在其自己的Thread中执行,因为它使用只有他可以访问的内容(如UI控件)。 我怎样才能做到这一点 ? 谢谢你的帮助。