我希望我的应用程序是为x64构建的(因为我使用的是x64 dll).在配置管理器中,我将"Active solution platform"设置为"x64"但是在项目列表Platform中设置为"x86".项目属性中的"平台目标"也设置为"x86"
我完全糊涂了设置目标平台的三个地方:
例如,我可以将Active解决方案平台设置为x64,将Project平台设置为x86,将Project target设置为x64.那意味着什么?
有人可以描述这些选项究竟是什么意思以及它们应该如何一起使用?如何编译到x64?
Interlocked.Exchange和Volatile.Write有什么区别?
两种方法都更新某些变量的值.有人可以总结何时使用它们?
http://msdn.microsoft.com/ru-ru/library/bb337971 和http://msdn.microsoft.com/en-us/library/gg712713.aspx
特别是我需要更新我的数组的双项,我希望另一个线程看到最新的值.什么是首选?Interlocked.Exchange(ref arr[3], myValue)或Volatile.Write(ref arr[3], info);在那里arr被声明为double?
================================================== ==========================真实的例子,我声明了这样的双数组:
private double[] _cachedProduct;
Run Code Online (Sandbox Code Playgroud)
在一个线程中,我更新它:
_cachedProduct[instrumentId] = calcValue;
...
are.Set();
Run Code Online (Sandbox Code Playgroud)
在另一个线程中,我像这样读取这个数组:
while(true) {
are.WaitOne();
...
result += _cachedProduct[instrumentId];
...
}
Run Code Online (Sandbox Code Playgroud)
对我来说它只是工作正常.然而,为了确保"它将永远有效",无论它看起来我应该添加Volatile.Write或Interlocked.Exchange.因为双重更新不能保证是原子的http://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx
在这个问题的答案中,我希望看到Volatile和Interlocked类的详细比较.为什么我们需要2节课?哪一个和何时使用?
我是C#和.NET的新手,所以如果这是一个太简单的问题,我就会大肆宣传.
我有一个十进制变量decVar.我需要将它与整数变量相乘intVar.我需要结果decimal.那么我应该将整数变量声明为int或作为decimal?
有这个代码,
decimal decVar = 0.1m;
decimal decRes = decVar * intVar;
Run Code Online (Sandbox Code Playgroud)
我应该这样声明:
int intVar = 3;
Run Code Online (Sandbox Code Playgroud)
或者像这样:
decimal intVar = 3;
Run Code Online (Sandbox Code Playgroud)
?
这是一个财务计算,所以我需要结果完全正确0.3.
upd:代码更新(感谢Jon)
我在本地机器+ MS Visual Studio上使用VisualSVN客户端和服务器已有一段时间了.
今天我决定将tortoisesvn升级到最新版本(因为它每次都没有版本弹出时弹出).
之后,我无法从VS提交/浏览历史记录等.tortoisesvn报告此类错误:
Working copy "C:\pathtorepository" is too old (format 10, created by Subversion 1.6).
如何解决我的问题?我应该从1.7到1.6回滚tortoisesvn吗?
在我的mvvm ViewModel中,我有这样的字段
public int Delta { get; private set; }
Run Code Online (Sandbox Code Playgroud)
但是当我更新它时:
Delta = newValue;
Run Code Online (Sandbox Code Playgroud)
用户界面未刷新.
我以为数据绑定会为我做这件事.例如,我可以将集合声明为ObservableCollection,然后数据绑定将起作用.
但是没有ObservableInt,怎么说查看它需要刷新呢?
可能我应该提出一些事件"通知财产改变"或什么?
可能重复:
十进制vs双! - 我应该使用哪一个?何时使用?
我double在我的交易软件中使用价格类型.我注意到有时会出现奇怪的错误.如果价格在"点"之后包含4位数,则会出现,如2.1234.
当我从我的程序"2.1234"发送市场订单出现在"2.1235"的价格.
我不使用,decimal因为我不需要"极端"精度.我不需要将"2.00000000003"与"2.00000000002"区分开来.我需要一个点后最多6位数.
问题是 - 线路在哪里?什么时候用decimal?
我应该decimal用于任何金融业务吗?即使我只需要点后一位数字?(1.1 1.2等)
我知道decimal很慢,所以double除非decimal绝对需要,否则我更愿意使用.
我必须实现一个消费者的一个生产者标准算法.我可以轻松地使用Queue几个lock语句来实现它.或者我可以使用ConcurrentQueue.什么是更好的?
如果Queue + lock使用然后我可以优化"多次加/退",因为我可以lock一次又Add多次.
一般情况下更快 - ConcurrentQueue或者Queue + lock差异有多大?当然ConcurrentQueue是最直接的方式,但我不想放弃很多性能,因为我在HFT交易应用程序中使用它.
我需要std::chrono::high_resolution_clock::time_point从一个线程写入并从另一个线程读取的字段.如果我声明它是我的代码编译没有任何错误.
但是为了使我的字段在另一个线程中可见,我用std::atomic这样的方式包围它,std::atomic<std::chrono::high_resolution_clock::time_point>现在我有以下编译错误:
/usr/include/c++/4.8/atomic:167:7: error: function ‘std::atomic<_Tp>::atomic() [with _Tp = std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000000l> > >]’ defaulted on its first declaration with an exception-specification that differs from the implicit declaration ‘constexpr std::atomic<std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000000l> > > >::atomic()’
atomic() noexcept = default;
Run Code Online (Sandbox Code Playgroud)
我应该如何声明std::chrono::high_resolution_clock::time_point从一个线程写入并从另一个线程读取的字段(以确保"读取线程"看到最后一个值)?
我刚刚问过关于任务的问题,但意识到我其实想问更多一般问题.有人可以总结一下任务和线程的优缺点.如何理解我应该使用Task还是Thread?
我有一个非常简单的问题.我有简单的类型变量(如int).我有一个进程,一个编写器线程,几个"只读"线程.我该如何声明变量?
volatile intstd::atomic<int>int我希望当"writer"线程修改值时,所有"读者"线程应该尽快看到新的值.
可以同时读取和写入变量,但我希望读者获得旧值或新值,而不是某些"中间"值.
我正在使用单CPU Xeon E5 v3机器.我不需要是可移植的,我只在这台服务器上运行代码,我编译-march=native -mtune=native.性能非常重要,所以除非绝对需要,否则我不想添加"同步开销".
如果我只是使用int并且一个线程写入值,那么在另一个线程中我可能暂时没有看到"新鲜"值吗?