我在NHibernate(v3.3)中遇到一个奇怪的错误,当尝试使用手动生成的ID持久保存实体时:
无法确定具有指定标识符{Id}的{Entity}是暂时的还是分离的; 查询数据库.在会话中使用显式Save()或Update()来防止这种情况.
但问题是,我正在使用Save而不是SaveOrUpdate.可能是什么问题呢?
是否Interlocked.Read(ref long)在 64 位架构上进行了“优化”?即如果我正在编写一个可以被两种架构使用的库,我是否应该担心Interlocked.Read在 64 位 CPU 上不必要地使用性能影响?
我想过使用这样的东西,所以我想知道这是否有意义:
// X64 is a preprocessor constant set for x64 builds
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static long Read(ref long address)
{
#if X64
// atomic on 64-bit processors
return address;
#else
// if I got it right, this creates a full memory barrier
return Interlocked.Read(ref address);
#endif
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Write(ref long address, long value)
{
#if X64
// atomic on 64-bit processors
address = value;
#else
// …Run Code Online (Sandbox Code Playgroud) 我正在使用 Timescale DB 来存储来自许多设备的测量结果。由于到目前为止大多数设备都有一组类似的指标,因此我使用了一个包含许多列的超表(每个指标一个)。
但是,一些新设备必须支持不同的指标,并且我还需要为每个设备计算和存储派生值。
所以看来我必须将这些值存储为单独的表,或者如果我想有一种保存时间序列数据的通用方法,则必须使用标准化方法(时间戳、设备、metric_type、值)?
“多列”模式方法对于此类测量来说是错误的,还是我做错了?
如何Expression动态创建树时创建强制转换?
问题是,我有一个类型的属性string:
public class Test
{
public string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想一般创建一个强类型的lambda表达式,表示一个委托,它返回一个object而不是a string(Expression<Func<T, object>>).
现在我这样做:
private static Expression<Func<T, object>> CreateIdQuery()
{
Type type = typeof(T);
PropertyInfo idProperty = type.GetProperty("Id");
ParameterExpression lambdaParam = Expression.Parameter(type, "x");
MemberExpression body = Expression.Property(lambdaParam, idProperty);
LambdaExpression expr = Expression.Lambda(body, lambdaParam);
return (Expression<Func<T, object>>)expr;
}
Run Code Online (Sandbox Code Playgroud)
但它在最后一行引发异常(我无法Expression<Func<Test, string>>转换Expression<Func<Test, object>>).
我如何施放表达式的主体(我假设该MemberExpression部分需要被投入一个object)?
我想附加到一个单独的应用程序(例如Microsoft Excel),并检测何时单击某个菜单项(或新版本中的功能区命令,无论如何).
我以为我可以使用RegisterWindowMessagein 来做user32.dll,但我不知道拦截哪些消息.理想情况下,我想概括一下并检测类似于:
"menu item XXX was clicked in the app YYY"
Run Code Online (Sandbox Code Playgroud)
我发现这篇CodeProject文章展示了如何为控件创建,应用程序启动/停止等事件注册钩子,但我找不到如何获得按钮点击或菜单点击的示例.
这甚至可能吗?我是在正确的轨道上,还是我需要采取不同的方法?
我正在使用DataTables(jQuery插件)来显示表格数据。如果使用AJAX从JSON Web服务获取数据。
如何强制使用JavaScript / jQuery刷新?我正在浏览API,找不到正确的功能。
是否可以通过用float一个binary(n)(n50 x 4)替换(比如说)50 列来改进SQL Server 2008 R2(和更新版本)的插入性能?
我认为使用固定大小binary(n)应该可以提高性能(数据量相同,处理所有列和更短的SQL查询所需的工作量更少),但许多网站建议不要使用binary列,所以我想看看是否有使用它真的有问题吗?
此外,问题是该表是非规范化的,并且通常不是所有列都填充值,因此varbinary(n)在许多情况下允许我减小行大小.有时只填充一列,但平均为~10列.
然后第三个问题是,如何更进一步,用一个替换(比如说)5行×50 float32列varbinary(5*50*4)?
因此,获得一些见解会很酷:
float用单个替换1行50 列binary(200);float用单个替换1行50 x varbinary(204)(标志/长度信息的几个字节) - 在未使用列时节省空间;float用单个替换5行50 x varbinary(1024)(标志/长度信息的几个字节).在所有情况下,始终一次读取整行.
(更新)
为了澄清,存储的数据是:
Timestamp_rounded Value_0ms Value_20ms Value_40ms ... Value_980ms
2016-01-10 10:00:00 10.0 11.1 10.5 ... 10.5
Run Code Online (Sandbox Code Playgroud)
我总是读取整行,主要聚类键是第一列(Timestamp),我将永远不必通过任何其他列查询表.
标准化数据显然会有一个Timestamp/ Value对,Timestamp然后具有毫秒精度.但是我必须存储50行的两列,而不是1行(Timestamp+ BLOB).
我正在尝试创建一个单个服务器/多个客户端 NetMQ 测试程序(我相信这应该使用路由器经销商模式),这将允许服务器使用单独线程上的工作人员处理唯一的客户端请求(并分别回复每个客户端),但我找不到适用于当前 nuget 版本(在撰写本文时为 v4.0.1.5)的单个工作示例。
每个客户端只应该发送一个请求(它包含它的 Id,因为它是一个 Dealer 套接字),并从服务器获得它的专用响应。服务器应该有一个线程池(IOCP 样式),它将使用消息并发回响应。
我在 NetMQ/Samples github 中找到了Multithreaded 示例,这似乎是我要找的,但它使用 aQueueDevice将客户端与工作人员连接起来,并且这个类似乎在某些时候已被删除:
var queue = new QueueDevice(
"tcp://localhost:5555",
"tcp://localhost:5556",
DeviceMode.Threaded);
Run Code Online (Sandbox Code Playgroud)
然后是netmq.readthedocs.io 上的Router-dealer 示例,它使用NetMQPoller,但不编译,因为它调用了不存在的RouterSocket.ReceiveMessage()和NetMQSocket.Receive(out bool hasmore)方法,这些方法已被删除:
public static void Main(string[] args)
{
// NOTES
// 1. Use ThreadLocal<DealerSocket> where each thread has
// its own client DealerSocket to talk to server
// 2. Each thread can send using it own socket
// …Run Code Online (Sandbox Code Playgroud) 客户端在其本地服务器上安装了业务应用程序,并具有其客户的数据库.我必须实现一个应用程序(web或win),它将查询数据库并根据某些规则向客户发送邮件.
但是,其中一个要求是邮件应该有一个允许其客户确认或取消某些约会的链接,问题是我的客户希望这些链接与他们的网站具有相同的域,该网站已经托管在某处其他.
我看到它的方式,唯一的方法是让他们允许我访问他们现有的网站,并在那里直接添加必要的功能,但他们对此并不高兴.
是否可以将单独的应用程序添加到同一个托管服务提供商,该服务提供商将位于同一个域中?
或者你有更好的主意吗?
是否可以取消在BindingSource.AddingNew事件处理程序中添加项目?
当用户单击 my 中的“添加新”按钮时BindingNavigator,我打开了一个对话框,该对话框可能会或可能不会返回有效文件。现在,我有这样的事情:
void bindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
using (var dialog = new OpenFileDialog())
{
var result = dialog.ShowDialog();
// user canceled?
if (result == DialogResult.Cancel)
return;
// TryLoad will return null on failure
var data = TryLoad(dialog.FileName);
// only add the item to the grid if not null
if (data != null)
e.NewObject = data;
}
}
Run Code Online (Sandbox Code Playgroud)
即使我没有e.NewObject在处理程序中设置一个值,DataGridView 中也会出现一个新的(“空”)项。
是否可以取消添加项目?
如果我知道我的点总是排列成两个矩形,是否有优化的方法来获得凸包?
我编写了经典的凸包算法(仅通过枚举所有点),但由于我有一堆矩形对,如果可能有更有效的方法来处理这种特殊情况,我就会徘徊.
这就是我所说的,澄清一下:

我尝试以各种方式对点进行排序,但我找不到优化它的一般规则.基本的凸壳算法是否也是最有效的方法呢?
更新
为了澄清我的最终目标,我已经将~100个矩形分组成两对,以及数千个点,我必须实时检查它们是否位于每个凸包内.现在我已经考虑了一下,我猜凸壳部分不会成为整个操作的瓶颈(但仍然有~100个,我的目标是实时60fps处理),所以我可能也可以使用@BartKiers建议的普通ol算法,然后在分析后再回到这个算法.
我会暂时搁置这个问题,或许某人有一个优化的想法,无论如何都可能有用.
在现有代码库中解决此类警告的正确方法是什么?
void test(uint16_t x, uint16_t y)
{
// warning: conversion to 'uint16_t' from 'int' may alter its value
uint16_t value = (x + 1) * y;
...
}
Run Code Online (Sandbox Code Playgroud)
所有这三个值都是无符号的16位整数,并且任何算术溢出都可以正确执行,而不会警告它这个平台int是16位的,我不会看到这段代码应该写的另一种方式,除了因为转换结果整数提升.
c# ×5
.net ×3
algorithm ×1
asp.net ×1
atomicity ×1
blob ×1
c ×1
convex-hull ×1
datagridview ×1
datatables ×1
dns ×1
gcc ×1
gcc-warning ×1
hook ×1
hyperlink ×1
interlocked ×1
javascript ×1
jquery ×1
netmq ×1
nhibernate ×1
performance ×1
postgresql ×1
reflection ×1
refresh ×1
sql-server ×1
timescaledb ×1
transient ×1
varbinary ×1
web-services ×1
windows ×1
zeromq ×1