C#线程池限制线程

好的…我已经给了这个网站一个公平的search,并且阅读了很多关于这个主题的文章。 我发现这个问题: 在C#中的简单线程池代码特别有用。 不过,就像看起来一样,我需要的东西稍有不同。 我已经看了MSDN的例子,并适应了我的需求。 我提到的例子是在这里: http : //msdn.microsoft.com/en-us/library/3dasc8as(VS.80,printer).aspx 我的问题是这个。 我有一个相当简单的代码集,通过HttpWebRequest和WebResponse类加载网页,并通过Stream读取结果。 我在线程中引发这个方法,因为它需要执行很多次。 该方法本身很短,但它需要被触发的次数(每次不同的数据)是不同的。 它可以是从1到200的任何地方。 我读过的所有东西似乎都表明ThreadPool类是主要的候选者。 这是棘手的事情。 我可能需要说这个东西说100次,但我最多只能有3个线程运行(为这个特定的任务)。 我已经尝试通过设置ThreadPool上的MaxThreads : ThreadPool.SetMaxThreads(3, 3); 我不完全相信这种方法正在工作。 此外,我不想闯入系统上运行的其他网站或程序,这将运行。 所以,通过限制ThreadPool上的ThreadPool ,我可以确定这只适用于我的代码和我的线程吗? MSDN示例使用事件驱动方法并调用WaitHandle.WaitAll(doneEvents); 这是我如何做到这一点。 所以我的问题的核心是,如何确保或指定可以为其代码运行的线程的最大数量,但代码继续运行更多的线程,因为以前的完成,直到任意点? 我正确的解决这个问题吗? 此致 贾森 好吧,我已经添加了一个信号量方法,并完全删除了ThreadPool代码。 这似乎很简单。 我从我的信息: http : //www.albahari.com/threading/part2.aspx 这个例子向我展示了如何: [下面的文本是从网站复制/粘贴] 一个容量为1的Semaphore与一个Mutex或lock相似,只是Semaphore没有“所有者” – 它是线程无关的。 任何线程都可以在Semaphore上调用Release ,而在使用Mutex和lock ,只有获取资源的线程才能释放它。 在下面的例子中,十个线程在中间执行一个Sleep语句的循环。 Semaphore确保一次不超过三个线程可以执行该Sleep语句: class SemaphoreTest { static Semaphore s = new […]

.NET数组的内存布局

什么是.NET数组的内存布局? 拿这个数组为例: Int32[] x = new Int32[10]; 我明白,arrays的大部分是这样的: 0000111122223333444455556666777788889999 每个字符是一个字节,数字对应于数组中的索引。 另外,我知道所有对象都有一个types引用和一个同步块索引,所以上面可以调整为: ttttssss0000111122223333444455556666777788889999 ^ +- object reference points here 此外,数组的长度需要被存储,所以也许这是更正确的: ttttssssllll0000111122223333444455556666777788889999 ^ +- object reference points here 这是完整的吗? 数组中有更多的数据吗? 我问的原因是,我们正在试图估计一个相当大的数据语料库的几个不同的内存表示将会花费多less内存,并且数组的大小变化很大,所以开销可能有一个在一个解决scheme中产生了巨大的影响,但是在另一个解决scheme中可能没有那么多 所以基本上,对于一个数组来说,有多less开销,这基本上是我的问题。 而在arrays坏队伍醒来之前,解决scheme的这一部分是一个静态的一次构build一次引用的东西,所以使用可生成列表在这里是没有必要的。

在生产中使用Django的Sql Server

有没有人有最近的经验与部署一个SQL Server数据库后端的Django应用程序? 我们的工作场所大量投资于SQL Server,如果没有足够开发的后端,它将不会支持Django。 我知道mssql.django-pyodbc和django-mssql作为非正式支持的后端。 这两个项目似乎只有一个人的贡献,这是一个有点担心,虽然贡献似乎有点规律。 是否有任何其他支持SQL Server的后端? 我在这里提到的两个“足够好”的生产? 你有什么经验?

独立开发人员应该开发哪种软件开发stream程?

我作为一个非常小的公司的独立开发人员工作。 我的工作非常混乱,我正在寻找方法使其更有条理。 一个问题是我的项目实际上没有pipe理。 很less有人问我在做什么,或者我有什么问题。 在某个时候,每周都会举行一次关于每周一次的会议,但是那是前一段时间。 似乎如果我想要这样的事情,我将不得不自己安排这些事情。有时候,我对接下来应该做的事情有点遗憾,因为我没有任务或明确的时间表。 从书籍和文章中,我发现很多可能有用的东西。 代码检查,TDD,unit testing,缺陷数据库等等,就像有一个好的编码标准(只存在一个粗略的风格指南,这在我看来已经有些过时了)。但是在一个小公司里,似乎没有资源或时间任何不重要的东西。 我在embedded式领域工作的事实似乎让事情变得更加复杂。 我觉得还有一个偷工减料的习惯,在短时间内做快速的黑客攻击。 这导致未完成和不专业的产品和错误等待在以后出现。 我会想象他们也是一个痛苦的维持。 所以,我即将inheritance一个具有挑战性的代码库,做新的开发,需要学习许多新的东西,我想同时build立一个过程。 这可能是最后的奖励,但是由于不太经验,我不确定是否可以把它closures。 在像这样的小商店里,环境对于编程来说是远远不够的。 还有很多其他的事情需要偶尔进行,如客户支持,接听电话,签名包裹,硬件testing,组装以及任何可能出现的各种任务。 所以你得到关于资源的想法。 这并不坏(有时解决一些客户问题有启发性),我相信它可以改进,但是我真正关心的是其他事情。 是否有可能在这样的地方开发? 这有助于进行某种pipe理吗? 什么样的? 是否有可能用小资源制造高质量的产品? 我如何说服自己和其他人,几十年来成功运作的公司需要改变? 什么将是至关重要的? 也许有人在类似的店里工作?

SQL Server如何在存储过程中处理关于事务的语句?

假设我有一个由多个独立的SELECT,INSERT,UPDATE和DELETE语句组成的存储过程。 没有明确的BEGIN TRANS / COMMIT TRANS / ROLLBACK TRANS逻辑。 SQL Server将如何处理这个存储过程事务明智? 每个陈述会有一个隐含的联系吗? 或者是否会有一个存储过程的事务? 另外,如何使用T-SQL和/或SQL Server Management Studio自己find这个问题? 谢谢!

Git-svn W:-empty_dir警告。 他们的意思是什么?

在使用标准布局使用git-svn来克隆现有的Subversion版本库时,我得到了一堆W: -empty_dir (和W: +empty_dir )警告。 克隆的git仓库似乎正在工作,即我可以做通常的git操作和dcommit到SVN仓库。 真正的问题是,最初的克隆和rebase会创build一些SVN仓库中不存在的空目录,位于仓库顶部(以及其他目录在trunk中)。 这些目录不包含文件,而只包含一些空目录。 看来“W:-empty_dir”警告对应于这些空目录。 我通过使用SVN检查整个存储库查找空目录,但没有空目录。 我也通过SVN检查,如果存储库具有特殊属性的文件,但没有任何比“可执行”和“MIMEtypes”以外。 现有的存储库并不是最初遵循标准布局,而是将其清理完毕,以便顶层目录只是“主干”,“标签”和“分支”。 什么可能导致创build这些Subversion下不存在的空目录?

如何将枚举绑定到combobox

我将绑定一个枚举的值与一个combobox控件。 我已经写了这个代码: cboPriorLogicalOperator.DataSource = Enum.GetValues(typeof(MyEnum)) .Cast<MyEnum>() .Select(p => new { Key = (int)p, Value = p.ToString() }) .ToList(); myComboBox.DisplayMember = "Value"; myComboBox.ValueMember = "Key"; 它运作良好,但我想知道是否有一个更简单的方法。

如何在暂停时处理AsyncTask onPostExecute以避免IllegalStateException

我很欣赏在轮换更改上有关AsyncTask的大量发帖。 使用兼容性库时,遇到以下问题并试图closuresDialogFragment中的onPostExecute 。 我有一个AsyncTask显示进度DialogFragment ,然后在onPostExecuteclosures对话框,然后可能会抛出另一个DialogFragment 。 如果进度对话框正在显示,我把应用程序放入后台,我得到了以下的片段: 1) onPause 2) onSaveInstanceState 3) onPostExecute在其中我试图消除和调用一个对话框。 我得到一个IllegalStateException因为我试图有效地提交一个事务,当活动保存了它的状态,我明白这一点。 在我认为(也许不正确),我不会得到一个onPostExecute直到重新创build活动的onPostExecute 。 然而,当把应用程序放到后台时,我认为(当然肯定是错误的) onPostExectute在片段/活动暂停时不会被调用。 我的问题是,我的解决scheme是简单地在onPostExecute中检测到片段/活动已暂停,只需执行我需要在onResume做什么呢? 对我来说似乎有些丑陋。 在此先感谢彼得。 编辑1 需要支持2.1及以上版本 编辑2 我曾考虑使用FragmentTransaction:add显示对话框FragmentTransaction:add和FragmentTransaction:commitAllowingStateLoss但是这不是没有问题。

在性能方面,使用BufferedOutputStream包装FileOutputStream的意义何在?

我有一个模块负责读取,处理和写入字节到磁盘。 这些字节通过UDP进入,并且在各个数据报被组装之后,被处理和写入磁盘的最终字节数组通常在200字节和500,000字节之间。 偶尔会有字节数组,在组装后,超过500,000字节,但是这些是比较less见的。 我正在使用FileOutputStream的write(byte\[\])方法 。 我也在用BufferedOutputStream封装FileOutputStream ,包括使用接受缓冲区大小的构造函数作为参数 。 看起来,使用BufferedOutputStream的趋势往往略好,但我只是开始尝试不同的缓冲区大小。 我只有一个有限的样本数据集(来自样本运行的两个数据集,我可以通过我的应用程序)。 是否有一个一般的经验法则,我可以申请试图计算最佳的缓冲区大小,以减less磁盘写入,并最大限度地提高了磁盘写入的性能给定的信息,我知道我正在写的数据?

如何打开iOS 5.1的偏好设置?

看起来像iOS 5.1打破了标准的URL编码导航用户偏好。 例如: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]]; 适用于iOS 5.0,但不适用于iOS 5.1(包括设备和模拟器)。 有没有人find了在iOS 5.1中复制这个function的方法?