我的方法返回很多点.我在执行期间也在许多方面构造newData.无论我返回哪里,我都需要保存并存储构造结果.不要错过"返回"我只是用try-finally块包围代码,所以现在我确定将存储newData.
List<X> newData = new List<X>();
try
{
....
update newData
.....
return;
.....
....
update newData
....
update newData
return;
.....
return;
} finally
{
// copy newData to data
}
Run Code Online (Sandbox Code Playgroud)
但我没有发现任何异常,并且此代码不适用于异常.一般来说是否可以接受,或者你可以提出另一种更好的方法
我是否纠正了阻止方法同时执行两次的唯一方法是使用lock语句?
private object lockMethod = new object();
public void Method() {
lock (lockMethod) {
// work
}
}
public void FromThread1() {
Method();
}
public void FromThread2() {
Method();
}
Run Code Online (Sandbox Code Playgroud)
当然我也可以使用MethodImpl(MethodImplOptions.Synchronized)几乎相同的东西.
还有其他技术吗?
我认为对于那些熟悉hft的人来说,这是一个更理论性的问题.我收到FAST的订单并处理它们.我每秒收到大约2-3千个订单.问题是我是否应该尝试同步或异步处理它们.
每次收到下一个订单时,我都需要做以下事情:
要做同步,我有大约200-300μs(能够每秒处理3000个订单).我认为这应该足够了.
只是计划异步任务我花了大约30μs
利弊:
同步:
异步:
同步示例:我们收到更新的MSFT订单,然后更新INTC订单并在不同的线程中处理它们.在这两种情况下,我们都会触发NASDAQ指数重新计算.因此纳斯达克指数的计算应该是同步的.然而,这个特殊问题可以解决以避免同步......这只是可能同步的一个例子.
所以问题是我应该处理同步或异步的订单更新.到目前为止,我处理它们异步,我有每个仪器的专用线程.因为我可以处理针对不同仪器更新的异步两个(MSFT和INTC),但是应该同步处理一个仪器(MSFT)的两个更新.
注意我倾向于编写无锁代码,所以我尽可能避免任何类型的锁.相反,我只是使用while(true)循环,因为我有很多CPU功率.
根据http://msdn.microsoft.com/en-us/library/aa691278%28VS.71%29.aspx double变量更新不是原子的.
我关心两个问题:
问题:
目前我在我的程序中使用了很多double和decimal变量/字段/属性,几乎每个都工作正常,所以我真的很困惑,因为我从不同的线程访问它们没有任何同步,这只是工作...但现在我在想可能最好用float"内置同步化"
我的应用程序InstrumentFactory- 我创建Instrument实例的唯一地方.每个仪器实例都包含多个字段,例如Ticker=MSFT和GateId=1,也是唯一的Id =1.
现在我意识到我几乎从不需要Instrument实例.在我需要的90%的情况下Id.例如,现在我有这样的方法:
public InstrumentInfo GetInstrumentInfo(Instrument instrument)
{
return instrumentInfos[instrument.Id];
}
Run Code Online (Sandbox Code Playgroud)
我们知道我们不应该传递比所需更多信息的参数.所以这段代码可能应该重构为:
public InstrumentInfo GetInstrumentInfo(int instrumentId)
{
return instrumentInfos[instrumentId];
}
Run Code Online (Sandbox Code Playgroud)
我现在可以重构90%的代码instrumentId而不是使用Instrument.
我应该这样做吗?改变无处不在Instrument,以instrumentId将它作为一个硬性要求(每个仪表应该有且仅有一个唯一的ID).但是我会有什么好处?作为"硬性要求"的回报,我想为此获得一些好处......(速度,可读性?)但我没有看到它们.
我有恒定大小的数组(现实生活中的大小 = 20),允许重复例如:
1 2 2 3 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
现在只有一个元素更新:
1 5 2 3 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
我需要使用这个数组。我应该只使用冒泡排序吗?
更新我不知道如何称呼我写的东西。但我想不可能更快地排序。欢迎评论!
// array is already almost sorted and INCREASING, element at pos need to be inserted to the right place
private void SortQuotes(List<Quote> quoteList, int pos)
{
var quoteToMove = quoteList[pos];
if (pos == 0 || quoteList[pos - 1].Price < quoteToMove.Price)
{
MoveElementsDown(quoteList, pos);
} else if (pos == quoteList.Count - 1 …Run Code Online (Sandbox Code Playgroud) 我使用了VisualAssistX Implement Virtual Methods选项,它生成了:
class Base: public IBase
{
public:
Base(void);
~Base(void);
virtual void IBase::Foo();
Run Code Online (Sandbox Code Playgroud)
我注意到我可以省略IBase并编程仍然编译如下:
virtual void Foo();
Run Code Online (Sandbox Code Playgroud)
如果这是相同的代码?为什么VisualAssistX会插入IBase::?是否只是提高可读性的"代码风格"?
谢谢
我正在寻找具有“阻塞”弹出功能的单生产者单消费者队列。除了一种方法外,提升spsc_queue几乎没问题:
bool pop(T & ret);
Pops one object from ringbuffer.
Run Code Online (Sandbox Code Playgroud)
这个方法是“非阻塞的”,如果没有数据就立即返回。我希望这个方法“阻塞”并等待一些数据到达。
我应该使用哪些集合?
upd至少有人可以建议任何带有阻塞流行音乐的 C++ 队列吗?
我-Ofast在我的程序中使用gcc选项导致延迟要求.我写了简单的测试程序:
#include <iostream>
#include <math.h>
static double quiet_NaN = std::numeric_limits<double>::quiet_NaN();
int main()
{
double newValue = 130000;
double curValue = quiet_NaN;
printf("newValue = %f\n", newValue);
printf("curValue = %f\n", curValue);
printf("isnan(newValue) = %d\n", isnan(newValue));
printf("isnan(curValue) = %d\n", isnan(curValue));
printf("newValue == curValue %d\n", (newValue == curValue));
printf("newValue != curValue %d\n", (newValue != curValue));
}
Run Code Online (Sandbox Code Playgroud)
我试图用默认标志和-Ofast运行它:
$ g++ TestPointer.cpp
$./a.out
newValue = 130000.000000
curValue = nan
isnan(newValue) = 0
isnan(curValue) = 1
newValue == curValue 0
newValue != curValue 1
$ …Run Code Online (Sandbox Code Playgroud) 我有一些org.eclipse.core.resources.IFolder我需要遍历这个文件夹中的所有文件.(我还需要为每个文件做一些SAX事情,但我不想加载EMF模型,因为它太慢了)
获取此文件夹和子文件夹中所有文件列表的最佳方法是什么?