可以yield return从多个线程调用静态类中的静态函数来安全地返回IEnumerable吗?
public static IEnumerable<FooClass> FooClassObjects()
{
foreach (FooClassWrapper obj in listOfFooClassWrappers)
{
yield return obj.fooClassInst;
}
}
Run Code Online (Sandbox Code Playgroud)
调用它的每个线程是否总是会收到对集合中每个对象的引用?在我的情况下listOfFooClassWrappers,在程序开始时写入一次,所以我不需要担心在调用此函数期间它会发生变化.我写了一个简单的程序来测试这个,我没有看到任何问题的迹象,但是线程问题可能很难被解决,并且这个问题可能在我做的运行期间根本没有显示出来.
编辑:C#线程安全的收益率回报?是类似的,但解决了迭代过程中修改集合的情况.由于隐藏的共享迭代器,因为类和方法都是静态的,所以我的关注更多地涉及多个线程,每个线程只获得集合的一部分.
标题几乎概括了这一点。我有一个为 x86 平台编译的应用程序,它/largeaddressaware设置了标志。在 x64 系统上运行它,我可以“免费”获得扩展的 4GB 用户模式虚拟内存,而无需指定/3GB启动选项。在 x86 系统上,这意味着内核模式内存仅为 1GB,但由于 x64 系统可以寻址更多内存,内核模式是否会保留 2GB,甚至会增加到 3GB?
编辑:要明确的是,我想知道每个进程的限制。这个问题源于阅读这篇文章。
编辑2:这个问题不是重复的多少内存可以在64位操作系统上32位进程访问?因为该问题仅涉及应用程序可访问的内存,而不是系统可访问的内存。如果我误解了并且没有为每个进程的系统保留内存,如果有人可以将其写为答案,我将不胜感激。我确信我不是第一个对此感到困惑的人。
c# windows memory-management virtual-memory large-address-aware
我需要按字典顺序合并和排序100,000多个单词列表.我目前使用略微修改的冒泡排序,但在O(n ^ 2)它需要相当长的时间.是否有更快的算法来排序单词列表?我正在使用Python,但如果有一种语言可以更好地处理这个问题,我会接受建议.