我正在开发一个需要主机本机Win32窗口的应用程序,不知怎的,我没有线索如何做到这一点.
我需要创建一个WPF对话框窗口,可以在其上显示本机Win32控件.这个对话框窗口上也会有WPF控件,所以我正在寻找某种Grid,我可以把它带到HWND并将它发送到非托管C++控件,所以它可以在它上面绘制.那可能吗 ?
我不需要知道该表面内发生了什么,只需要让C++ dll绘制它,我需要做的就是传递具有适当大小的HWND(我知道).
我是WPF的新手(用于做win32编程)并且很丢失(但我现在如何将它与C#.NET等接口)
如果你能给我任何提示,那会很棒:)
我有一张约有2000多万条记录的表格.
结构如下:
EventId UNIQUEIDENTIFIER
SourceUserId UNIQUEIDENTIFIER
DestinationUserId UNIQUEIDENTIFIER
CreatedAt DATETIME
TypeId INT
MetaId INT
Run Code Online (Sandbox Code Playgroud)
表每天接收大约10万条记录.
我在除MetaId之外的每一列都有索引,因为它没有在'where'子句中使用
问题是当我想要拿起例如.所需SourceUserId的最新100条记录
查询有时最多需要4分钟才能执行,这是不可接受的.
例如.
SELECT TOP 100 * FROM Events WITH (NOLOCK)
WHERE SourceUserId = '15b534b17-5a5a-415a-9fc0-7565199c3461'
AND
(
TypeId IN (2, 3, 4)
OR
(TypeId = 60 AND SrcMemberId != DstMemberId)
)
ORDER BY CreatedAt DESC
Run Code Online (Sandbox Code Playgroud)
我无法进行分区等,因为我使用的是标准版的SQL Server,而且Enterprise太贵了.
我也认为这张表很小很慢.
我认为问题在于ORDER BY子句,因为db必须经历更大的数据集.
任何想法如何使它更快?
也许关系型数据库对于那种数据不是一个好主意.
始终通过CreatedAt DESC订购数据
谢谢你的阅读.
PabloX
我有以下词典列表:
d = [
{ 'name': 'test', 'regions': [{'country': 'UK'}] },
{ 'name': 'test', 'regions': [{'country': 'US'}, {'country': 'DE'}] },
{ 'name': 'test 1', 'regions': [{'country': 'UK'}], 'clients': ['1', '2', '5'] },
{ 'name': 'test', 'regions': [{'country': 'UK'}] },
]
Run Code Online (Sandbox Code Playgroud)
从列表中删除重复条目的最简单方法是什么?
我看到了有效的解决方案,但前提是项目没有嵌套的dicts或列表
看来我的rabbitmq听取了所有接口,尽管:
在/etc/rabbitmq/rabbitmq.config中:
[{rabbit, [{tcp_listeners, [{"10.0.0.1", 5672}]}]},
{rabbitmq_mochiweb, [{listeners, [{mgmt, [{ip, "10.0.0.1"},
{port, 55672}]}]}]}].
Run Code Online (Sandbox Code Playgroud)
在/etc/rabbitmq/rabbitmq-env.conf中:
export RABBITMQ_NODENAME=rabbit
export RABBITMQ_NODE_IP_ADDRESS=10.0.0.1
export ERL_EPMD_ADDRESS=10.0.0.1
Run Code Online (Sandbox Code Playgroud)
当我运行netstat -uptan | grep beam我得到:
tcp 0 0 10.0.0.1:5672 0.0.0.0:* LISTEN 1378/beam
tcp 0 0 0.0.0.0:33551 0.0.0.0:* LISTEN 1378/beam
tcp 0 0 127.0.0.1:38737 127.0.0.1:4369 ESTABLISHED 1378/beam
Run Code Online (Sandbox Code Playgroud)
如何使光束不在0.0.0.0:33551上听?
我需要找到录制音频流的最佳方式.我已经在C++中构建了低级代码,并将其部分接口到C#.
所以我有一个C++回调,给我一个浮点数组 - 音频信号.目前,我的C++ lib正在以wav格式将数据直接记录到文件中,它只是在结束录制时通知我的C#应用程序.
但是,我希望在UI方面有更多的交互性,比如"无限"进度条,记录的数据量,取消按钮等等,并且因为它最坏的时候会是一分钟,也许最好将它保存在内存中.我对.NET和C#内存管理知之甚少,所以我不知道如何有效地实现它.
在C#中是否有任何快速可调整大小的容器,我可以将数据放入其中并稍后像数组一样访问它?
我还想建立一个波形图像.我已经用C++完成了这些事情,但不知怎的,我不喜欢写太多消息,转移对象等的想法.
所以把事情放在一起:
我有C++非托管回调,它做了一些东西,从内部我想在处理数据后调用C#方法,C原型将是:
void process(float**signal,int n); (通常[2] [n] - 用于立体声)
什么是C#等价物,我如何从C++回调中调用它?
写连续流的最佳类是什么(如mem.put(float [] [] data,int size))然后将其作为数组或其他简单方法读取(例如从中保存wav文件或制作波形位图)
如果我在C#中这样做会不会有重大的性能损失?(托管c ++包装器调用c#函数等...可能还有一些DSP的东西)或者我只是偏执狂?:)
干杯,
pablox
好的,我这样解决了:
在我的C++头文件中,我得到了传输结构:
public ref struct CVAudio {
public:
float *left;
float *right;
int length;
};
Run Code Online (Sandbox Code Playgroud)
然后在托管C++类中我声明了:
delegate void GetAudioData([In, Out] CVAudio^ audio);
Run Code Online (Sandbox Code Playgroud)
然后我可以用它作为初始化音频的方法的参数:
void initializeSoundSystem(void *HWnd, GetAudioData ^audio);
Run Code Online (Sandbox Code Playgroud)
那个代表也有一个C原型
typedef void (CALLBACK *GETAUDIODATA)(CVAudio ^a);
Run Code Online (Sandbox Code Playgroud)
在内部C++类中使用的是:
void initializeSoundSystem(HWND HWnd, GETAUDIODATA audio);
Run Code Online (Sandbox Code Playgroud)
然后第一种方法的主体是:
void VDAudio::initializeSoundSystem(void *HWnd, GetAudioData ^audio)
{
HWND h = (HWND) HWnd; …Run Code Online (Sandbox Code Playgroud)