小编Hus*_*slu的帖子

我应该使用ThreadPools或任务并行库进行IO绑定操作

在我的一个有点聚合的项目中,我从网上解析了feed,podcast等.

如果我使用顺序方法,考虑到大量资源,处理所有资源需要相当长的时间(因为网络问题和类似的东西);

foreach(feed in feeds)
{
   read_from_web(feed)
   parse(feed)
}
Run Code Online (Sandbox Code Playgroud)

所以我想实现并发,并且无法决定我是否应该使用ThreadPools来处理工作线程,或者只是依靠TPL来对它进行排序.

ThreadPools肯定会用工作线程处理我的工作,我会得到我所期望的(在多核CPU环境中,其他核心也将被利用).

并发

但我仍然想考虑TPL,因为它推荐的方法,但我有点担心它.首先,我知道TPL使用ThreadPools,但增加了额外的决策层.我主要关心的是单核环境存在的情况.如果我没错,TPL从一开始就用一个数量的工作线程开始,这些工作线程数等于可用的CPU核心数.我担心TPL会产生与我的IO绑定案例的顺序方法类似的结果.

因此,对于IO绑定操作(在我的情况下从Web读取资源),最好是使用ThreadPools来控制事物,还是更好地依赖于TPL?TPL也可以用于IO绑定场景吗?

更新:我主要担心的是 - 在单核CPU环境中,TPL只是表现得像顺序方式,还是会提供并发性?我已经阅读了使用Microsoft .NET的并行编程,所以这本书却找不到确切的答案.

注意:这是我之前的问题的重新措辞[ 是否可以将线程并发和并行一起使用?这是错误的措辞.

c# multithreading parallel-extensions threadpool task-parallel-library

76
推荐指数
2
解决办法
2万
查看次数

AppDomain.CurrentDomain.AssemblyResolve要求<AppName> .resources程序集?

使用代码如何将附属程序集嵌入到 csharptest.net提供的EXE文件中,我创建了一个自定义程序集解析程序并在我的资源中嵌入了我的程序集.

我可以成功解析我使用的程序集,但不知怎的,AppDomain.CurrentDomain.AssemblyResolve请求一个名为'AppName.resources'的程序集,特别是"MyProgram.resources,Version = 0.15.3992.31638,Culture = en-US,PublicKeyToken = null"不知道如何解决?

我试图禁用从资源加载我的自定义程序集(将所有程序集dll放在程序目录中)并启用AppDomain.CurrentDomain.AssemblyResolve,但它仍然要求它.

我对此感到有点困惑,如果你可以帮助我,我会非常感激.

这是我感兴趣的代码;

static Assembly ResolveAssemblies(object sender, ResolveEventArgs args)
{
    Assembly assembly = null;
    string name = args.Name.Substring(0, args.Name.IndexOf(','));
    if (name == "MyProgram.resources") return null;
    else name = string.Format("MyProgram.Resources.Assemblies.{0}.dll", name);

    lock (_loadedAssemblies)
    {
        if (!_loadedAssemblies.TryGetValue(name, out assembly))
        {
            using (Stream io = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
            {
                if (io == null)
                {
                    MessageBox.Show("MyProgram can not load one of it's dependencies. Please re-install the program", string.Format("Missing Assembly: {0}", name), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Environment.Exit(-1); …
Run Code Online (Sandbox Code Playgroud)

c# assemblies assembly-resolution

26
推荐指数
2
解决办法
1万
查看次数

解决程序集的异常:尝试使用fixup加载无法验证的可执行文件

我正在将所需的程序集嵌入到我的项目中,并在运行时使用AppDomain.CurrentDomain.AssemblyResolve事件解析它们.

一切正常,除了irrKlang的.net4-wrapper,如果我这样做会引发异常;

System.IO.FileLoadException: Attempt to load an unverifiable executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019)
   at System.Reflection.RuntimeAssembly.nLoadImage(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence evidence, StackCrawlMark& stackMark, Boolean fIntrospection, SecurityContextSource securityContextSource)
   at System.Reflection.Assembly.Load(Byte[] rawAssembly)
   at xyz.Utility.Helpers.AssemblyManager.Resolver(Object sender, ResolveEventArgs args) in C:\Users\shalafi\Desktop\xyz\trunk\xyz\Utility\Helpers\AssemblyManager.cs:line 55
   at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
Run Code Online (Sandbox Code Playgroud)

基本上我怀疑CLR 无法使用Assembly.Load(byte [])加载混合模式程序集,虽然我不确定.

我无法找到与异常消息相关的任何内容;

尝试使用fixups加载无法验证的可执行文件(IAT包含2个以上的部分或TLS部分.)

帮助赞赏.

c# assembly-resolution

19
推荐指数
1
解决办法
8761
查看次数

使用mongoose在mongodb中存储应用/站点设置

我一直在开发一个已经成功运行的基于node.js的站点,它使用mongoose作为后端存储使用mongodb.

问题是,我想为站点实现一些可配置的设置(应该能够使用/ backend/page进行配置).

所以我想找到一种方法来使用猫鼬存储所有这些设置但是我没有找到适合该事物的模式.

var mongoose        = require('mongoose');

var SettingsSchema = new mongoose.Schema({
});

mongoose.model('Settimgs', SettingsSchema);
Run Code Online (Sandbox Code Playgroud)

反正我是否可以强制架构只有一个文档?所以我可以只使用一个文档使用上面的模式,并将所有必需的设置放在那里.

除了我的另一个想法,设置架构集合将托管多个文档,每个文档的唯一部分名称如下,但每个部分的架构内容应该不同.我带来的一个想法就是将特定于章节的json存储为对象数据而不提供模型细节;

var mongoose        = require('mongoose');

var SettingsSchema = new mongoose.Schema({
    name: { type: String, lowercase: true, trim: true, unique: true, required: true },  // the settings section name
    ...
    JSON-Object or JSON-string here?
    Is {data: Object} a possible usage?
});

mongoose.model('Settimgs', SettingsSchema);
Run Code Online (Sandbox Code Playgroud)

但是,如果我能找到一种方法来定义部分的模型,它将会更好和可测试 - 就像后端设置的模型和前端设置的另一个模型一样,应该以某种方式存储在Settings集合中.

所以我想拥有的是;

var BackendSchema = new mongoose.Schema({
.. backend related settings here..
});

var FrontendSchema = new mongoose.Schema({
.. …
Run Code Online (Sandbox Code Playgroud)

mongoose

8
推荐指数
1
解决办法
547
查看次数

3D稀疏矩阵实现?

我通过http://www.blackbeltcoder.com/Articles/algorithms/creating-a-sparse-matrix-in-net找到了一个非常好的 C# 稀疏矩阵实现。

但当我在 3d 坐标系中工作时,我需要一个稀疏矩阵实现,我可以用它来映射 3d 坐标系。

详细信息:我在内存中存储大量原始形状数据,例如立方体。我确实有大量的条目(大约 3000 万个),并且有很多空(零)条目。鉴于我的每个条目花费 1 个字节的条目,我想实现一个稀疏矩阵,这样我就可以相当节省内存空间。

注意:快速访问矩阵单元对我来说是一个相当重要的因素,因此我会牺牲速度与内存消耗。

c# 3d sparse-matrix

5
推荐指数
1
解决办法
3685
查看次数

Promise.map over 对象

我有一个对象;

{ '6': { stream: { twitch: [Object] } },
  '7': { stream: { twitch: [Object] } },
  '8': { stream: { twitch: [Object] } },
  '9': { stream: { twitch: [Object] } },
  '10': { stream: { twitch: [Object] } },
  '11': { stream: { twitch: [Object] } } }
Run Code Online (Sandbox Code Playgroud)

我想迭代它;

return Promise.map(myObj, function(minute, minuteIndex) {
Run Code Online (Sandbox Code Playgroud)

所以基本上 minute 应该保存数据,而 minuteIndex 应该保存索引。

我可以用 lodash 做到这一点,但 bluebird 不能以某种方式。

_.forEach(hour.minutes, function(minute, minuteIndex) {
Run Code Online (Sandbox Code Playgroud)

我知道此代码以前可以使用,但现在无法使用。

有任何想法吗?

node.js bluebird

4
推荐指数
1
解决办法
2万
查看次数

元素“id”与嵌套类的任何字段或错误属性都不匹配

我有以下 mongodb 文档架构;

{ 
    "_id" : ObjectId("5c9d34ff781318afb9e8ab43"), 
    "name" : "Name", 
    "slug" : "slug",
    "services" : {
        "subservice" : {
            "id" : NumberInt(37030)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将我的课程定义为;

public class MainModel
{
    public ObjectId Id { get; set; }

    [BsonElement("name")]
    public string Name { get; set; }

    [BsonElement("slug")]
    public string Slug { get; set; }

    [BsonElement("services")]
    public ServicesDef Services { get; set; }

    public class ServicesDef 
    {
        [BsonElement("subservice")]
        public SubServiceDef SubService{ get; set; }

        public class SubServiceDef 
        {
            [BsonElement("id")]
            public int Id …
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-.net-driver

3
推荐指数
1
解决办法
3154
查看次数

SSLStream.AuthenticateAsServer"客户端和服务器无法通信,因为它们没有通用算法"

我正在研究需要通过套接字与客户端通信的服务器应用程序.在初始数据交换之后的连接过程中,客户端需要通过套接字进行安全连接.

所以我启动安全连接,如调用StartupSSLHandshake()方法;

    private void StartupSSLHandshake()
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;

        using (var networkStream = new NetworkStream(this.Connection._Socket, true))
        {
            this.SSLStream = new SslStream(networkStream, false);

            try
            {
                this.SSLStream.AuthenticateAsServer(CertificateHelper.Certificate, true, SslProtocols.Tls, true);

                Console.WriteLine("Cipher: {0} strength {1}", SSLStream.CipherAlgorithm, SSLStream.CipherStrength);
                Console.WriteLine("Hash: {0} strength {1}", SSLStream.HashAlgorithm, SSLStream.HashStrength);
                Console.WriteLine("Key exchange: {0} strength {1}", SSLStream.KeyExchangeAlgorithm, SSLStream.KeyExchangeStrength);
                Console.WriteLine("Protocol: {0}", SSLStream.SslProtocol);

            }
            catch(AuthenticationException e)
            {
                Logger.FatalException(e, "Certificate exception");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在运行时使用http://blogs.msdn.com/b/dcook/archive/2008/11/25/creating-a-self-signed-certificate-in-c.aspx生成我的服务器证书.

这是我的CertificateHelper类,如果需要,它会生成它:

public static class CertificateHelper
{
    public const string SertificateFile = "cert.pfx";
    public static X509Certificate …
Run Code Online (Sandbox Code Playgroud)

c# ssl x509certificate

0
推荐指数
1
解决办法
6599
查看次数