你可以使用Visual Studio for Android开发吗?
如果是这样,您将如何设置android SDK而不是.NET框架,是否有任何特殊设置或配置?
我在ACE,Boost和wxWidgets方面拥有丰富的经验.我最近找到了POCO库.有没有人对它们有任何经验,以及它们在性能和可靠性方面与ACE,Boost和wxWidgets相比如何?
我特别感兴趣用POCO取代ACE.我无法让ACE使用带有x64目标的VS2008进行编译.我主要使用ACE_Task,所以我认为我可以用Poco的线程和消息队列替换它们.
我感兴趣的POCO的其他部分是HTTPServer,HTTPClient和LayeredConfiguration.这些库与Boost和wxWidgets中的库类似,但我尝试将wxWidgets的使用限制为GUI组件,而类似的Boost库则很难.
我对任何人可以分享关于POCO的任何经验感兴趣,无论好坏.
SqlCommand的CommandText的长度是否有所不同?我也不是在谈论成千上万的角色.这就是我所拥有的:
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
for (int i=0; i<1000; ++i)
{
string name = i.ToString() + "Bob" + i.ToString();
string email = i.ToString() + "Jim" + i.ToString();
// etc...
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@name", name));
cmd.Parameters.Add(new SqlParameter("@country", country));
DateTime cmdStart = DateTime.Now;
cmd.ExecuteNonQuery();
DateTime cmdEnd = DateTime.Now;
TimeSpan len = cmdEnd - cmdStart;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下sql,第一次迭代需要0.5秒.第二个需要1.1秒.第三个需要3.3秒.等等,直到它只是暂停超时.
string sql =
"INSERT INTO Test " +
" ([name] " +
" ,[email] " +
" ,[country] " + …
Run Code Online (Sandbox Code Playgroud) 原始问题
我正在编写一个日志类,其目标是能够执行此操作:
// thread one
Logger() << "Some string" << std::ios::hex << 45;
// thread two
Logger() << L"Some wide string" << std::endl;
Run Code Online (Sandbox Code Playgroud)
目前我的Logger标题看起来像这样:
#pragma once;
#include <ostream>
class Logger
{
public:
Logger();
~Logger();
std::ostream* out_stream;
};
template <typename T>
Logger& operator<< (Logger& logger, T thing) {
*logger.out_stream << thing;
return logger;
}
Run Code Online (Sandbox Code Playgroud)
关于这门课的一些注意事项
我有三个问题:
在答案中学到的东西总结:
最终结果
#pragma once
#include …
Run Code Online (Sandbox Code Playgroud) 我编写(和销售)的软件在分发之前已经过压缩和加密.每次我发布一个新版本时,我会保留所有的.map文件和生成的二进制文件,包括压缩和加密之前的exe文件.
当它在客户端的机器上崩溃时,我会得到一个minidump.我在Visual Studio中打开这些minidump并在那里探索它们.
我通过在.map文件中搜索地址来充分利用这些小型转储.这通常会让我进入代码的正确区域,我通常可以解释为什么崩溃发生并修复它,但这非常耗时.
如果我可以在minidump的调试中使用我从原始构建中保存的符号,将会很有帮助.
我的问题是我收到有关无法找到正确符号的警告.我的研究让我相信这是因为客户机上的exe的校验和与Visual Studio构建的exe的校验和不匹配.我理解为什么,它已被压缩和加密.当然校验和不匹配.
我想我可以手动编辑minidump或更改已保存二进制文件的校验和以匹配可分发的校验和.我宁愿操纵存储的副本,所以我不必修改进来的每个转储,但我会对其中任何一个进行修改.
所以,我的问题是:我如何找到这些校验和并弄清楚我应该用它们替换它们?作为辅助问题:有更好的方法吗?
这是SQL查询语句:
SELECT p.id, p.[name], SUM(ps.sales_amount) AS GROSS_SALES
FROM products p
LEFT OUTER JOIN product_sales ps ON p.id = ps.product_id
GROUP BY p.id, p.[name]
Run Code Online (Sandbox Code Playgroud)
优于:
SELECT SUM([t2].[value]) AS [SalesAmount], [t2].[id] AS [ProductId], [t2].[name] AS [ProductName]
FROM (
SELECT (
SELECT SUM([t1].[sales_amount])
FROM [dbo].[product_sales] AS [t1]
WHERE [t1].[product_id] = [t0].[id]
) AS [value], [t0].[id], [t0].[name]
FROM [dbo].[products] AS [t0]
) AS [t2]
GROUP BY [t2].[id], [t2].[name]
Run Code Online (Sandbox Code Playgroud)
第二个是LINQ2SQL查询的结果.仍在寻找重写LINQ表达式的方法......
该示例中最优化的SQL查询是什么?
你的意见?谢谢!
我有一个进程外的COM服务器,需要密切关注事物.此服务器作为服务运行,并且在内部是单例.为简单起见,我会称他为BossCom.
我有另一个进程外COM服务器,它是一个工作者.对于系统稳定性而言,它是一次性服务器(意味着如果您创建2个WorkerCom,则有2个WorkerCom.exe正在运行).为简单起见,我会称他为WorkerCom.
WorkerCom可以通过任何东西启动,即使有人通过命令行使用正确的命令行参数运行他也可以启动它.
总体目标是让BossCom知道什么是WorkerComs,知道他们在做什么,并能够给他们订单(暂停,停止,加速等).
我最初的想法是,每当WorkerCom启动时,他都会CoCreateInstance一个BossCom并调用BossCom-> RegisterWorker(IUnknown me).然后当WorkerCom即将关闭时,他会调用BossCom-> UnregisterWorker(IUnknown me).BossCom可以为IWorkerCom查询IUnknown,并能够发出命令.
如果所有这些com对象都在同一个进程中,那将会很有效,但它们不是.我想过使用GlobalInterfaceTable,但它只是单个进程意义上的全局.
我花了几天时间研究这个并且不知所措.也许我是隧道视野.
如何编组从Worker到Boss的com对象的引用?
哦,而且,值得一提的是,BossCom是用C#编写的,而WorkerCom是用ATL C++编写的,但我会用VB,Scala,Lisp等编写的解决方案.我想我可以翻译核心理念.:-)
我想将以下SQL转换为Linq2SQL.
select isnull(max(Id),0) from tbl
Run Code Online (Sandbox Code Playgroud)
即使我将Id定义为 Int NOT NULL
我希望能够将defult值设为0,即使表中没有行也是如此.
我能够提出的最佳可读方法是
var maxId = dc.tbl.Select(row => row.Id)
.ToArray().Union(Enumerable.Range(0, 1)).Max();
Run Code Online (Sandbox Code Playgroud)
但是这种方法需要降低所有数据,性能更高但可读性更低
var maxId = dc.tbl.Select(row => row.Id)
.OrderByDescending(ii => ii).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我有以下代码:
class TimeOutException
{};
template <typename T>
class MultiThreadedBuffer
{
public:
MultiThreadedBuffer()
{
InitializeCriticalSection(&m_csBuffer);
m_evtDataAvail = CreateEvent(NULL, TRUE, FALSE, NULL);
}
~MultiThreadedBuffer()
{
CloseHandle(m_evtDataAvail);
DeleteCriticalSection(&m_csBuffer);
}
void LockBuffer()
{
EnterCriticalSection(&m_csBuffer);
}
void UnlockBuffer()
{
LeaveCriticalSection(&m_csBuffer);
}
void Add(T val)
{
LockBuffer();
m_buffer.push_back(val);
SetEvent(m_evtDataAvail);
UnlockBuffer();
}
T Get(DWORD timeout)
{
T val;
if (WaitForSingleObject(m_evtDataAvail, timeout) == WAIT_OBJECT_0) {
LockBuffer();
if (!m_buffer.empty()) {
val = m_buffer.front();
m_buffer.pop_front();
}
if (m_buffer.empty()) {
ResetEvent(m_evtDataAvail);
}
UnlockBuffer();
} else {
throw TimeOutException();
}
return val; …
Run Code Online (Sandbox Code Playgroud) c++ ×5
c# ×2
linq-to-sql ×2
sql ×2
.net ×1
ace ×1
android ×1
boost ×1
com ×1
crash-dumps ×1
database ×1
debugging ×1
interprocess ×1
sql-server ×1
templates ×1