小编jav*_*red的帖子

如何打印对象ID?

`我需要知道来自程序完全不同部分的两个引用是否引用同一个对象.我无法比较programaticaly参考,因为它们来自不同的上下文(一个参考从另一个参考不可见,反之亦然).

然后我想使用打印每个对象的唯一标识符Console.WriteLine().但是ToString()方法不返回"唯一"标识符,它只返回"classname".

是否可以在C#中打印唯一标识符(如在Java中)?

c#

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

如何创建远程svn存储库的本地副本?

我有远程svn存储库.我想签出它(带历史记录),然后在Visual Studio中用作常规存储库.过了一会儿,我将从本地存储库提交(提交更改)到远程存储库(如果有的话,还会更新文件).

所以我似乎只需要两个svn存储库副本,我需要能够同步它们.

怎么做?

svn visualsvn visual-studio

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

如何保证对Array中"reference type"项的更新对其他线程可见?

private InstrumentInfo[] instrumentInfos = new InstrumentInfo[Constants.MAX_INSTRUMENTS_NUMBER_IN_SYSTEM];

public void SetInstrumentInfo(Instrument instrument, InstrumentInfo info)
{
    if (instrument == null || info == null)
    {
        return;
    }
    instrumentInfos[instrument.Id] = info;  // need to make it visible to other threads!
}

public InstrumentInfo GetInstrumentInfo(Instrument instrument)
{
    return instrumentInfos[instrument.Id];  // need to obtain fresh value!
}
Run Code Online (Sandbox Code Playgroud)

SetInstrumentInfoGetInstrumentInfo从不同的线程调用. InstrumentInfo是不可变的类.我保证在打电话时有最新的副本GetInstrumentInfo吗?我担心我可以收到"缓存"副本.我应该添加同步吗?

声明instrumentInfosvolatile不会帮助,因为我需要声明数组项为volatile,不是数组本身.

我的代码有问题,如果有问题如何解决?

UPD1:

我需要我的代码在现实生活中工作,不符合所有规范!因此,如果我的代码在现实生活中起作用,但在某些环境下的某些计算机上"理论上"不起作用 - 那没关系!

  • 我需要我的代码在Windows下使用最新的.NET Framework在现代X64服务器(目前有2个处理器HP DL360p Gen8)上工作.
  • 我不需要在奇怪的计算机或Mono或其他任何东西下使用我的代码
  • 我不想引入延迟,因为这是HFT软件.因此,"微软的实现使用强大的内存模型进行写入.这意味着写入被视为易失性"我可能不需要添加额外的内容Thread.MemoryBarrier,除了增加延迟之外什么都不做.我认为我们可以相信微软将在未来版本中继续使用"强大的内存模型".至少微软不太可能改变内存模型.所以我们假设它不会.

UPD2: …

c# multithreading synchronization volatile

10
推荐指数
1
解决办法
1139
查看次数

我应该"绑定""旋转"线程到某个核心吗?

我的应用程序包含几个"旋转"的延迟关键线程,即从不阻塞.这样的线程预计占用一个CPU核心的100%.然而,现代操作系统似乎经常将线程从一个核心转移到另一个核心.因此,例如,使用此Windows代码:

void Processor::ConnectionThread()
{
    while (work)
    {
        Iterate();
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有在任务管理器中看到"100%占用"核心,整体系统负载为36-40%.

但如果我把它改成这个:

void Processor::ConnectionThread()
{
    SetThreadAffinityMask(GetCurrentThread(), 2);
    while (work)
    {
        Iterate();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我确实看到其中一个CPU核心被100%占用,整体系统负载也降低到34-36%.

这是否意味着我应该倾向于SetThreadAffinityMask"旋转"线程?如果我SetThreadAffinityMask在这种情况下改进延迟添加?我还应该为"旋转"线程做些什么来改善延迟?

我正在将我的应用程序移植到Linux,所以这个问题更多的是关于Linux,如果这很重要.

upd发现此幻灯片显示将忙等待线程绑定到CPU可能会有所帮助:

在此输入图像描述

c++ multithreading low-latency

10
推荐指数
2
解决办法
2664
查看次数

如何将java源导入eclipse?

对不起,可能是新手问题

我的文件夹文件系统包含java源代码,如:C:\ project\src\com\sun\blahblah ...\Main.java

主类在com.sun.blahblah包中...并包含public static void main方法,即一切都是格式良好的:)

我想导入整个文件夹C:\ project\src然后我想右键单击Main.java并将其作为Java应用程序运行.

我应该在Eclipse中选择哪种导入(从文件系统或什么)?

注意我不想创建我的源的副本.他们已经在SVN下.我想编辑/运行现存的元素.

eclipse

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

计算方法每秒计算多少次的最佳方法

我有dll方法,应该是"QoS" - 这种方法应该被称为每秒最多100次:

    private static extern int ExecTrans(int connectionId);
Run Code Online (Sandbox Code Playgroud)

这个方法只在程序中的一个地方使用,所以可以在这个地方进行qos.我需要单独的"qos counter" connectionId.所以ExecTrans(1),ExecTrans(2)应该去不同的柜台.

在第一次迭代时,我想计算调用方法的频率(对于每个方法connectionId).即我想要"实时统计".有两种方法:

- allow to exceed limitiation for a short period. for example allow "100 transaction from 0 to 1 second, 100 transaction from 1 to 2 seconds and 200 transactions from 0.5 to 1.5 second".
- at any second interval transactions should not exceed 100.
Run Code Online (Sandbox Code Playgroud)

现在我不关心使用哪种方法,但我会选择一种创建较少的"开销".我希望qos尽可能少地添加"额外工作",因为它的交易软件每0.1毫秒都很敏感.

至于第一种方法,我认为我可以使用类似的东西(pseude-code,可能stats并且curStats应该是线程安全的):

private int[] stats      // statistic to display to user
private …
Run Code Online (Sandbox Code Playgroud)

c#

9
推荐指数
1
解决办法
5150
查看次数

什么是BOOST_ROOT?

我正在尝试构建x64版本的http://code.google.com/p/quickfast/ 这就是构建脚本使用%BOOST_ROOT%的方式:

set SETUP_CHECKING=BOOST_ROOT=%BOOST_ROOT%
if not exist "%BOOST_ROOT%\boost" goto setup_is_bad

includes += $(BOOST_ROOT)/include

set RELEASE_PATH=%QUICKFAST_ROOT%\bin;%QUICKFAST_ROOT%\Output\Release;%MPC_ROOT%;%BOOST_ROOT%\lib;
Run Code Online (Sandbox Code Playgroud)

因此构建脚本需要以下文件/文件夹:

%BOOST_ROOT%\boost
$(BOOST_ROOT)/include
%BOOST_ROOT%\lib
Run Code Online (Sandbox Code Playgroud)

我已下载/构建了boost,没有libinclude文件夹.这就是我的boost文件夹包含的内容:

C:\bin\boost_1_49_0

14.03.2012  11:59    <DIR>          .
14.03.2012  11:59    <DIR>          ..
13.03.2012  16:17           249 856 b2.exe
13.03.2012  16:18    <DIR>          bin.v2
13.03.2012  16:17           249 856 bjam.exe
22.02.2012  18:25    <DIR>          boost
30.01.2012  21:30               866 boost-build.jam
30.01.2012  21:30             1 054 boost.css
30.01.2012  21:30             6 308 boost.png
30.01.2012  21:30            18 606 boostcpp.jam
30.01.2012  21:30             2 545 bootstrap.bat
13.03.2012  16:17 …
Run Code Online (Sandbox Code Playgroud)

c++ boost

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

是否可以捕获任何任务终止到期异常和日志?

是否有可能在任何Task终止到期异常和日志时捕获?我已经添加了CurrentDomain_UnhandledException处理,但这没有帮助.

Task.Factory.StartNew()像往常一样使用创建任务.当发生这样的任务异常时,它会无声地崩溃(但它应该永远工作,我也在使用LongRunning选项).所以我希望收到有关此类行为的通知.

理想情况下,我想设置一些选项,以便在任何任务崩溃到期时通知.

如果不可能那么我可能应该为我创建的每个任务添加一些内容吗?当然我可以try{} finally{}在每个任务中添加大块,但可能有更好的解决方案?

c# task-parallel-library

9
推荐指数
2
解决办法
1466
查看次数

如何将定时器分辨率从C#设置为1 ms?

我使用过这个工具,发现我的Windows Server 2008 R2 Standard的分辨率为15毫秒,而Windows 8的分辨率为1毫秒.

我宁愿在Windows Server 2008 R2上将Timer Resolution设置为1 ms,因为我正在运行低延迟软件.

我发现了这篇msdn文章,但它没有解释如何从C#程序更改Timer分辨率.我怎么做?

c# timer windows-server-2008-r2

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

每当我知道我正在处理无符号值时,我应该使用"unsigned"吗?

通常,价值观是积极的.例如,TCP/UDP序列号始终为正值.两者intunsigned int有足够大的存储即使是最大的sequence number,所以我可以使用这些类型.当已知值为正值时,还有许多其他示例.

unsigned当常规signed类型的容量足够(并且通常绰绰有余)时,是否有任何理由使用类型?

我个人倾向于使用常规类型,因为:

  • int可能比uint或更具可读性unsigned int
  • 我不需要包含额外的标题UINT等.
  • 我会在程序中的某个地方避免额外的演员阵容

使用unsignedI型的原因可以想象:

  • 帮助编译生成更好的代码?
  • 帮助另一个程序员理解该变量是无符号的
  • 避免可能的错误(例如,当int被分配给UINT编译器时,可能会产生编译时错误,我们应该检查我们分配的值是否为负数)

c++ signedness

9
推荐指数
1
解决办法
259
查看次数