javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

user-experience

chmod

css

content-type

variables

var

loops

iteration

std

c++-faq

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

在开始一个项目之前,我编写了一个简单的测试来比较(System.Collections.Concurrent)中的ConcurrentBag与锁定&列表的性能。 我非常惊讶ConcurrentBag比用一个简单的List锁定慢十倍以上。 据我了解,当读者和作家是同一线程时,ConcurrentBag效果最佳。 但是,我没有想到它的性能不会比传统锁差很多。

我已经使用两个Parallel for循环对列表/包进行读写操作进行了测试。 但是,写入本身显示出巨大的差异:

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 object();
        List<int> lst1 = new List<int>(collSize);

        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();


        Parallel.For(0, collSize, delegate(int i)
            {
                lock(list1_lock)
                {
                    lst1.Add(i);
                }
            });

        stopWatch.Stop();
        Console.WriteLine("Elapsed = {0}", 
                          stopWatch.Elapsed.TotalSeconds);
       }

正如我提到的,进行并发读取和写入对并发袋测试没有帮助。 我是在做错什么,还是这个数据结构真的很慢?

[编辑]-我删除了任务,因为在这里我不需要它们(完整的代码有另一个任务阅读)

[编辑]非常感谢您的回答。 我很难选择“正确的答案”,因为这似乎是几个答案的组合。

正如Michael Goldshteyn所指出的,速度实际上取决于数据。Darin指出,应该有更多的争用来使ConcurrentBag更快,而Parallel.For不必启动相同数量的线程。 要带走的一点是不要对锁进行任何不必要的操作。 在上述情况下,我看不到自己在锁内执行任何操作,除非可能是将值分配给temp变量。

此外,sixlettervariables指出,尽管我尝试以相反的顺序运行原始测试,并且ConcurrentBag仍然较慢,但是碰巧正在运行的线程数也可能会影响结果。

我从启动15个任务开始进行了一些测试,结果取决于其他因素。 但是,对于最多一百万次插入,ConcurrentBag的性能几乎与锁定列表一样好或更好。 超过一百万,锁定有时似乎要快得多,但是我的项目可能永远不会拥有更大的数据结构。这是我运行的代码:

        int collSize = 1000000;
        object list1_lock=new object();
        List<int> lst1 = new List<int>();
        ConcurrentBag<int> concBag = new ConcurrentBag<int>();
        int numTasks = 15;

        int i = 0;

        Stopwatch sWatch = new Stopwatch();
        sWatch.Start();
         //First, try locks
        Task.WaitAll(Enumerable.Range(1, numTasks)
           .Select(x => Task.Factory.StartNew(() =>
            {
                for (i = 0; i < collSize / numTasks; i++)
                {
                    lock (list1_lock)
                    {
                        lst1.Add(x);
                    }
                }
            })).ToArray());

        sWatch.Stop();
        Console.WriteLine("lock test. Elapsed = {0}", 
            sWatch.Elapsed.TotalSeconds);

        // now try concurrentBag
        sWatch.Restart();
        Task.WaitAll(Enumerable.Range(1, numTasks).
                Select(x => Task.Factory.StartNew(() =>
            {
                for (i = 0; i < collSize / numTasks; i++)
                {
                    concBag.Add(x);
                }
            })).ToArray());

        sWatch.Stop();
        Console.WriteLine("Conc Bag test. Elapsed = {0}",
               sWatch.Elapsed.TotalSeconds);
trans by 2020-08-11T06:56:06Z

android-“未安装以下SDK组件:sys-img-x86-addon-google_apis-google-22和addon-google_apis-google-22”

我是Windows 7 64位用户,在更新最新版本的Android StudioSDK组件后,出现3006321832724268068032问题。

The following SDK components were not installed: sys-img-x86-addon-google_apis-google-22 and addon-google_apis-google-22

请帮助我解决此问题。 谢谢。

trans by 2020-08-11T06:47:34Z

javascript-防止锚定行为

当我想防止锚标签的默认行为时,我使用

<a href="javascript:void(0);">link</a>

哪个是最有效的解决方案?

trans by 2020-08-11T06:44:02Z

对于G中两个变量的循环

不允许在Go中使用以下for循环,

for i := 0, j := 1; i < 10; i++, j++ {...}

下面两个变量的for循环的正确等效项是什么?

for (int i = 0, j = 1; i < 10; i ++ , j ++) {...} 
trans by 2020-08-11T06:41:54Z

为什么我的C#数组在投射到对象时会丢失类型标志信息?

调查一个错误,我发现这是由于C#中的这种怪异造成的:

sbyte[] foo = new sbyte[10];
object bar = foo;
Console.WriteLine("{0} {1} {2} {3}",
        foo is sbyte[], foo is byte[], bar is sbyte[], bar is byte[]);

输出为“ True False True True True”,而我希望“ bar is byte[]”返回False。 显然bar既是byte[]又是sbyte[]? 对于其他有符号/无符号类型,例如Int32[]UInt32[],也会发生相同的情况,但不是Int32[]Int64[]

谁能解释这种行为? 这是在.NET 3.5中。

trans by 2020-08-11T06:38:41Z

html-在轮播中保持图像宽高比

我正在使用Bootstrap创建轮播,我的图像很大,因此当屏幕小于图像时,不会保持该比例。

我该如何改变呢?

这是我的代码:

.carousel .item {
  height: 500px;
}
.carousel img {
  position: absolute;
  top: 0;
  left: 0;
  min-width: 100%;
  height: 500px;
}

[HTTP://JS fiddle.net/Dr Q扣Q/]

我需要图片适合100%的宽度,但要保持其500px的高度(我认为是500px),这意味着在较小的屏幕上我们看不到图片的最左侧和最右侧。

我尝试将图像包含在div中并添加

overflow: hidden;
width: 100%;
height: 500px;
display: block;
margin: 0 auto;

但这不起作用

谢谢!

trans by 2020-08-11T06:34:29Z

停止Maven索引更新Eclipse

之前可能已经问过这个问题。

每次我打开日食时,都将永远需要更新Maven回购索引。

我没有安装任何Maven插件,但仍然可以。

有谁知道如何禁用此功能,因为这对我来说很痛苦。

谢谢

trans by 2020-08-11T06:30:46Z

java-如何访问此私有变量?

编写以下代码时,编译器如何不抱怨?

public class MyClass 
{
    private int count;

    public MyClass(int x){
        this.count=x;
    }

    public void testPrivate(MyClass o){
        System.out.println(o.count);
    }   
}

即使它是写入testPrivate的同一类的实例,也不应该在System.out.println(o.count)处给出编译错误吗? 毕竟,我试图直接访问私有变量。
该代码甚至可以正常运行。

trans by 2020-08-11T06:27:21Z

neo4j-使用Cyph向现有节点添加关系

我是第一次尝试Neo4j。 我正在使用2.0-RC1社区版。

我创建了一些节点:

MERGE (u:User{username:'admin',password:'admin'})
MERGE (r1:Role{name:'ROLE_ADMIN'})
MERGE (r2:Role{name:'ROLE_WEB_USER'})
MERGE (r3:Role{name:'ROLE_REST_USER'})

现在我想在节点之间添加关系。 但是,我不想清除使用上述脚本创建的现有数据库,添加语句并再次运行它。 我想将关系添加到现有节点。 Google帮我找到了这个:

START n=node(*), m=node(*)  
where has(n.username) and has(m.name) and n.username = 'admin' 
and m.name = 'ROLE_WEB_USER' 
create (n)-[:HAS_ROLE]->(m)

哪个工作正常(即使我不理解所有语法)。 但是,我知道这会找到任何具有username属性的节点和具有name属性的节点,而不是使用标签来检查其节点类型是否正确。

如何使用标签来做同样的事情?

trans by 2020-08-11T06:26:14Z

键绑定-列出某个emacs mod的所有键绑定

我知道我可以使用C-h b列出emacs中所有可用的键绑定,但是可以只列出适用于某种模式(例如dired-mode)的键绑定。

在Dired +中,我可以

?
h

它向我展示了所有适用的Dired模式键盘绑定。

谢谢

trans by 2020-08-11T06:24:43Z

javascript-使require.js数据主缓存过期

我正在使用require.js和r.js打包我的AMD模块。 我通过以下语法使用jquery和requirejs:

<script data-main="/js/client" src="/js/external/require-jquery.js"></script>

所有这些都可以很好地完成前后包装,但是在chrome和移动Safari保留client.js缓存版本的过程中,我遇到了很多问题。 我想在client.js中添加一个cachebuster,但似乎无法弄清楚如何使用上述语法。

我尝试了以下变化:

<script data-main="js/client.js?b=busted" src="/js/external/require-jquery.js"></script>

但现在需要尝试从app.build.js而不是/js获取client.js,因此需要404s。

我也尝试添加

urlArgs : "bust="+new Date().getTime()

app.build.js,但似乎没有效果。

我还尝试将相同的值添加到app.build.js,但是当它在其中时,r.js不再连接我的js文件,而只是将它们丑陋了。

破坏require.js数据主脚本缓存的正确语法是什么?

trans by 2020-08-11T06:21:52Z

使用Matplotlib的pyp绘制将2个类分隔的决策边界

我真的可以使用技巧来帮助我绘制决策边界以区分数据类别。 我通过Python NumPy创建了一些样本数据(来自高斯分布)。 在这种情况下,每个数据点都是2D坐标,即由2行组成的1列向量。 例如。,

[ 1
  2 ]

假设我有2个类,class1和class2,并通过下面的代码(分配给变量x1_samples和x2_samples)为class1创建了100个数据点,为class2创建了100个数据点。

mu_vec1 = np.array([0,0])
cov_mat1 = np.array([[2,0],[0,2]])
x1_samples = np.random.multivariate_normal(mu_vec1, cov_mat1, 100)
mu_vec1 = mu_vec1.reshape(1,2).T # to 1-col vector

mu_vec2 = np.array([1,2])
cov_mat2 = np.array([[1,0],[0,1]])
x2_samples = np.random.multivariate_normal(mu_vec2, cov_mat2, 100)
mu_vec2 = mu_vec2.reshape(1,2).T

当我绘制每个类的数据点时,它看起来像这样:

enter image description here

现在,我想出了一个决策边界方程,将两个类别分开,并希望将其添加到绘图中。 但是,我不太确定如何绘制此函数:

def decision_boundary(x_vec, mu_vec1, mu_vec2):
    g1 = (x_vec-mu_vec1).T.dot((x_vec-mu_vec1))
    g2 = 2*( (x_vec-mu_vec2).T.dot((x_vec-mu_vec2)) )
    return g1 - g2

我将非常感谢您的帮助!

编辑:直观地讲(如果我做的数学正确),当我绘制函数时,我希望决策边界看起来像这条红线...

enter image description here

trans by 2020-08-11T06:15:40Z

如何获取匹配正则表达式的最后一个Git标签

我需要Git命令来获取/查找以'v'开头的最后一个标签,以获取最新的版本提交(我在开头使用带有v字母的标签来标记下一个应用程序版本(例如:v0.9.1beta)。

有什么办法吗?

trans by 2020-08-11T06:10:11Z

git svn-git-svn克隆签出错误的仓库?

所以我试图通过使用git-svn切换到git。 我有一个名为myrepo的svn存储库,我想从其中克隆一个名为myproject的项目。 问题是通过运行以下命令:

Using higher level of URL: path-to-repo/myrepo/myproject => path-to-repo/myrepo

整个仓库myrepo被克隆,而不仅仅是myproject。 我也尝试使用-T,-t,-b来让git知道项目的布局,但是没有成功。 我总是得到以下输出:

Using higher level of URL: path-to-repo/myrepo/myproject => path-to-repo/myrepo

并尝试克隆那个。 难道我做错了什么? 可能是svn repo布局损坏或git不兼容吗?

trans by 2020-08-11T06:07:48Z

C ++中没有名称的命名空间

可能重复:
未命名/匿名名称空间与静态函数

我碰到了这段代码

namespace ABC {
namespace DEF {

namespace
{

我希望名称空间后面应加上一些名称,但此代码并非如此。

C ++允许吗? 这个未命名的命名空间有什么优势?

trans by 2020-08-11T06:06:49Z

oop-C#继承和默认构造函数

假设有一个基类A和一个派生自B的类A。然后,我们知道类A的构造函数永远不会被类3006277890779649644932继承。但是,当创建新对象A时,-在类B的默认/自定义构造函数之前,将调用类3006277890779649644934的默认构造函数。 调用。 也许这样做的目的是需要将类A的字段初始化为默认值。

现在,假设类A已经定义了一个自定义构造函数。 这意味着编译器将静默删除类A的默认构造函数。 现在,在创建类B的新实例时,在调用类A932的构造函数之前会自动调用哪个类3006277890779649644931的构造函数? (在这种情况下,如何初始化类A的字段?)

trans by 2020-08-11T06:03:56Z

C#-从Visual Studio中完全删除“错误列表”

我想从Visual Studio 2008中完全删除“错误列表”,而不是禁用它,我希望它消失了。 它使我无休止地无休止地冒出来,我想我一定是“做错了”,但我只是想使用VS,而不会在其他任何击键提示下都收到警告。

我试过在选项(工具->选项)中编辑许多不同的字段,它只是稍微降低了错误列表弹出的频率。 我还取消选择了错误,警告和消息。 它弹出,没有任何显示。 取消固定也无济于事。

目前还不能升级到VS 2010。

我正在寻找以下解决方案:删除对此负责的dll或配置文件

另外我还是想要内联验证(小波浪形标记等),但是错误列表窗口让我很烦。

trans by 2020-08-11T05:59:38Z

机器学习-如何使用Python使用最近邻算法对数据分类?

我需要使用(我希望)最近邻居算法对一些数据进行分类。 我已经搜索了这个问题,发现了很多库(包括PyML,mlPy和Orange),但是我不确定从哪里开始。

我应该如何使用Python实现k-NN?

trans by 2020-08-11T05:57:34Z

Javascript-如何使window.showmodaldialog在chrome 37中工作?

我们有一个庞大的Web应用程序,使用window.showmodaldialog进行警报,确认和弹出窗口。 从Chrome 37版开始,此呼叫已被禁用。

有什么快速的解决方法可以使window.showmodaldialog在最新版本的Chrome中工作?

我在这里添加window.showmodaldialog的变通办法,尽管这不是一个完美的变通办法,因为这不会像showmodaldialog那样破坏代码执行,而是将打开弹出窗口。

window.showModalDialog = function (url, arg, feature) {
        var opFeature = feature.split(";");
       var featuresArray = new Array()
        if (document.all) {
           for (var i = 0; i < opFeature.length - 1; i++) {
                var f = opFeature[i].split("=");
               featuresArray[f[0]] = f[1];
            }
       }
        else {

            for (var i = 0; i < opFeature.length - 1; i++) {
                var f = opFeature[i].split(":");
               featuresArray[f[0].toString().trim().toLowerCase()] = f[1].toString().trim();
            }
       }



       var h = "200px", w = "400px", l = "100px", t = "100px", r = "yes", c = "yes", s = "no";
       if (featuresArray["dialogheight"]) h = featuresArray["dialogheight"];
        if (featuresArray["dialogwidth"]) w = featuresArray["dialogwidth"];
       if (featuresArray["dialogleft"]) l = featuresArray["dialogleft"];
        if (featuresArray["dialogtop"]) t = featuresArray["dialogtop"];
        if (featuresArray["resizable"]) r = featuresArray["resizable"];
       if (featuresArray["center"]) c = featuresArray["center"];
      if (featuresArray["status"]) s = featuresArray["status"];
        var modelFeature = "height = " + h + ",width = " + w + ",left=" + l + ",top=" + t + ",model=yes,alwaysRaised=yes" + ",resizable= " + r + ",celter=" + c + ",status=" + s;

        var model = window.open(url, "", modelFeature, null);

       model.dialogArguments = arg;

    }

只需将这段代码放在页面的开头。

trans by 2020-08-11T05:51:39Z

express-如何在文件夹层次结构中使用__dirname上

我的应用程序结构为:

 /app
     /css
     /js
     ..
 /script
    /server.js

我正在尝试使用__dirname来指向/ app文件夹

app.use(express.static( __dirname + '/app'));

我真的不知道在网上搜索什么,请帮忙。

trans by 2020-08-11T05:49:24Z