我有想要的数字:
1.215145156155 => 1.2
1.368161685161 => 1.35
1.578414616868 => 1.6
Run Code Online (Sandbox Code Playgroud)
(*注意:如果为零,则不应标记百分位.)
什么是最快的做到这一点呢?
这就是我现在所拥有的,而且速度不够快:
def rounder(v):
v = str(round(float(v),2))
if len(v) == 3: v = v + str(0)
d0 = int(v[0])#ones
d1 = int(v[2])#tenths
d2 = int(v[3])#hundredths
if d2 <= 4:
return str(d0)+'.'+str(d1)
elif 4 < d2 < 7:
return str(d0)+'.'+str(d1)+str(5)
elif d2 >= 7:
if d1 != 9:
return str(d0)+'.'+str(d1+1)
if d1 == 9:
return str(d0+1)+'.'+str(0)
Run Code Online (Sandbox Code Playgroud) 在将HQL转换为SQL时,Hibernate在JDBC内部使用PreparedStatements.如何处理HQL中的内联参数?
例:
public List<Student> loadAllStudentsByStatus(String status) {
String queryString = "FROM Student student WHERE student.status = " + status;
Query queryObject = currentSession().createQuery(queryString);
return queryObject.list();
}
Run Code Online (Sandbox Code Playgroud)
状态是"解析"并在SQL中用作参数,还是作为内联参数发送.
我在论证背后的原因是"最佳实践",以及重复调用的查询性能
有没有办法让IntelliJ运行我正在查看的当前MyTest.java文件?
谢谢
我正在为另一个基于公共.NET API的程序编写插件.通常,这些插件是通过创建引用API程序集的类库DLL来创建的.然后,通过继承API程序集中的基本命令类来创建命令类.然后将应用程序设置为引用插件DLL文件,然后还负责在用户请求时实际启动自定义命令类.
但是,现在我正在尝试通过自动化代码生成System.CodeDOM
,并且想要创建一个简单的控制台应用程序,该应用程序根据API程序集中的类型自动生成新的类类型.
然而,当我尝试运行我的应用程序时,我得到以下异常.
System.BadImageFormatException未处理消息:无法加载文件或程序集"RevitAPI,Version = 2011.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.尝试加载格式不正确的程序.
通常我需要将插件程序集的目标框架设置为3.5.但是现在我发现如果我将控制台应用程序的目标框架设置为2.0,上面的错误就会消失.但是,我的控制台应用程序已经引用了我的目标框架设置为3.5的其他类库.而且我真的不想围绕2.0框架重写它们.
.net revit badimageformatexception revit-api target-framework
我有一系列事件流经我的服务器.我不可能存储所有这些,但我希望能够定期处理其中的一些.所以,我想保留一个流的子集,它是我所见过的所有内容的随机抽样,但是上限为最大尺寸.
因此,对于每个新项目,我需要一个算法来决定是否应该将它添加到存储集,或者我是否应该丢弃它.如果我添加它,并且我已经达到极限,我需要一个算法来驱逐其中一个旧项目.
显然,只要我低于我的极限(只保存一切),这很容易.但是,一旦我超过这个限制,我怎样才能保持良好的随机抽样而不偏向旧物品或新物品?
谢谢,
这不是关于EasyHook的特定功能,而是关于一般的挂钩.我想用这个签名挂钩一个函数:
public: int __thiscall Connection_t::Send(unsigned int,unsigned int,void const *)
Run Code Online (Sandbox Code Playgroud)
这显然是非托管代码,我正在尝试使用EasyHook将其与我的托管c#代码挂钩.但我认为这不是EasyHook导致问题,但我知道调用约定等...
这就是我如何定义DllImport并删除:
public static int Send_Hooked(uint connection, uint size, IntPtr pDataBlock)
{
return Send(connection, size, pDataBlock);
}
[DllImport("Connection.dll", EntryPoint = "?Send@Connection_t@@QAEHIIPBX@Z", CallingConvention = CallingConvention.ThisCall)]
static extern int Send(uint connection, uint size, IntPtr pDataBlock);
[UnmanagedFunctionPointer(CallingConvention.ThisCall, CharSet = CharSet.Unicode, SetLastError = true)]
delegate int DSend(uint connection, uint size, IntPtr pDataBlock);
Run Code Online (Sandbox Code Playgroud)
但是一旦我注入钩子,钩住的程序就会继续崩溃 - 没什么大惊喜.我认为它是调用约定的问题,并且我的钩子函数以某种方式干扰了钩子程序的堆栈.
所以我看看另一个项目谁挂钩相同的功能,但在c ++中弯路(挂钩部分):
Func = (int (__stdcall *)(unsigned int, unsigned short, void const ))::GetProcAddress(::GetModuleHandle("Connection.dll"), "?Send@Connection_t@@QAEHIIPBX@Z");
PVOID DetourPtr;
PVOID TargetPtr;
DetourTransactionBegin();
DetourAttachEx(&Func, …
Run Code Online (Sandbox Code Playgroud) 每当我提到C++标准库iostream的慢性能时,我都会遇到一阵难以置信的风潮.然而,我有剖析器结果显示在iostream库代码中花费了大量时间(完全编译器优化),并且从iostream切换到特定于操作系统的I/O API和自定义缓冲区管理确实提供了一个数量级的改进.
C++标准库做了多少额外工作,标准是否需要它,它在实践中是否有用?或者有些编译器提供了与手动缓冲区管理竞争的iostream实现吗?
为了解决问题,我编写了几个简短的程序来练习iostreams内部缓冲:
ostringstream
http://ideone.com/2PPYwchar[]
缓冲区http://ideone.com/Ni5ctvector<char>
使用http://ideone.com/Mj2Fi将二进制数据放入其中back_inserter
vector<char>
简单的迭代器http://ideone.com/9iitvstringbuf
http://ideone.com/qc9QAvector<char>
简单的迭代器加边界检查http://ideone.com/YyrKy请注意,ostringstream
和stringbuf
版本运行的迭代次数较少,因为它们的速度要慢得多.
在ideone上,它ostringstream
比std:copy
+ back_inserter
+ 慢大约3倍std::vector
,比memcpy
原始缓冲区慢大约15倍.当我将实际应用程序切换到自定义缓冲时,这与前后分析一致.
这些都是内存缓冲区,因此iostream的缓慢不能归咎于缓慢的磁盘I/O,过多的刷新,与stdio的同步,或者人们用来解释C++标准库观察到的缓慢的任何其他事情iostream的.
很高兴看到其他系统上的基准测试和常见实现的评论(例如gcc的libc ++,Visual C++,Intel C++)以及标准规定了多少开销.
许多人都正确地指出,iostream更常用于格式化输出.但是,它们也是C++标准提供的二进制文件访问的唯一现代API.但是对内部缓冲进行性能测试的真正原因适用于典型的格式化I/O:如果iostreams无法保持磁盘控制器提供原始数据,那么当他们负责格式化时,他们怎么可能跟上呢?
所有这些都是outer(k
)循环的每次迭代.
在ideone上(gcc-4.3.4,未知的操作系统和硬件):
ostringstream
:53毫秒stringbuf
:27毫秒vector<char>
并且back_inserter
:17.6毫秒vector<char>
与普通迭代器:10.6毫秒vector<char>
迭代器和边界检查:11.4 mschar[]
:3.7毫秒在我的笔记本电脑上(Visual C++ 2010 x86,cl …
所以,我使用的是Matthew Ephraim的GhostscriptSharp,它是我ASP.Net MVC项目中非托管Win32 Ghostscript DLL的简单C#包装器.一些背景:
我试图做的是让用户上传PDF,然后将该文档转换为图像,然后我可以保存到我选择的任何目录中(以及做一些其他OOP以将新图像绑定到我的网站) .
我决定使用Ephraim先生的包装类(GhostscriptSharp)因为它很简单易用,它让我可以相对干净地访问DLL的API.
为了测试它,我创建了一个虚拟的C#控制台应用程序,以确保我可以加载DLL,访问它,将PDF文件交给本地磁盘,然后让它将JPG写入同一本地磁盘.经过一些学习经历,我获得了成功.我会把它交给C:\ INPUT.pdf,它会递给我C:\ OUTPUT.jpg.
但是,在将我在控制台应用程序中使用的GhostScriptSharp代码集成到我的ASP.NET MVC项目到我用P/invoke调用DLL的位置之后,Ghostscript返回了int/error代码-100
,这是致命的错误(E_Fatal
在GhostScript源代码中调用).我通过HTML表单上传的文件得到了相同的结果,如果我把它与我在工作控制台应用程序中使用的完全相同的硬编码路径.
作为参考,抛出异常的行在GhostScriptSharp.cs中是93-97(在CallApi
函数中):
int result = InitAPI(gsInstancePtr, args.Length, args);
if (result < 0) {
throw new ExternalException("Ghostscript conversion error", result);
}
Run Code Online (Sandbox Code Playgroud)
显然,抛出异常,因为result
是-100
.
当调用InitAPI时,实例ptr是有效的int
(虽然我不知道GS的实例是否正确),args的长度为20(是string[]
)有效的GhostScript选项(包括正确转义的路径)到我的输入和输出文件).
长话短说,我做错了什么?错误代码-100
似乎是一个全能,因为没有文档说明这里可能出错的地方.
非常感谢任何帮助,谢谢你提前.
从预定义的enum
基于唯一值的列表中选择QT组合框中的项目的最佳方法是什么.
在过去,我已经习惯了.NET的选择方式,可以通过将所选属性设置为您想要选择的项目值来选择项目:
cboExample.SelectedValue = 2;
Run Code Online (Sandbox Code Playgroud)
如果数据是C++枚举,是否有基于项目数据的QT执行此操作?
c# ×2
c++ ×2
.net ×1
algorithm ×1
asp.net-mvc ×1
assembly ×1
batch-file ×1
combobox ×1
detours ×1
ghostscript ×1
hibernate ×1
hook ×1
hql ×1
iostream ×1
java ×1
jdbc ×1
performance ×1
python ×1
qcombobox ×1
qt ×1
revit ×1
revit-api ×1
sampling ×1
unit-testing ×1
windows ×1