我有一个sqlite数据库,用于存储有关备份作业的信息。每次运行时,由于向特定表中添加了约32,000个条目,因此增加了约25mb。
该表是一个“映射表”,用于将某些信息链接到另一个表中的记录...并且它具有我不使用的主键(autoincrement int)。
sqlite将根据其值为INT列保留1、2、4或8个字节。该表仅具有3个附加列,也是INT类型。
我已经在查询中用作过滤器(WHERE)的列上向数据库添加了索引。
在存在索引等的情况下以及在上述情况下,主键在性能方面是否具有任何有用的好处?
注意:性能对该项目非常重要-但是,如果在32,000个输入作业中保存10ms意味着额外的10MB数据,则不是!
我使用Webclient使用异步调用上传数据到服务器,
WebClient webClient = new WebClient();
webClient.UploadDataAsync(uri , "PUT", buffer, userToken);
Run Code Online (Sandbox Code Playgroud)
我已将DatauploadProgress和DatauploadCompleted事件附加到适当的回调函数
// Upload Date Progress
webClient.UploadProgressChanged += new
UploadProgressChangedEventHandler(UploadProgressCallback);
// Upload Date Progress
void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)
{
// Magic goes here
logger.writeToLog("Percentage =" + e.ProgressPercentage);
}
Run Code Online (Sandbox Code Playgroud)
将e.ProgressPercentage始终返回50..不管上传文件的大小(10KB尝试之间不同的尺寸60MB).函数本身只被调用两次(真的很快),百分比显示50!..特别是大文件不合逻辑......
e.BytesSent也没有帮助..总是以字节为单位显示文件大小:S(例如:如果文件大小为63,000,我会得到e.BytesSent = 63,000和e.ProgressPercentage= 50
有人能指出问题给我吗?
根据C++规范(23.2.4.3),vector :: erase()只会使"擦除点之后的所有迭代器和引用"无效"
这样,在采用reverse_iterators时越过所有向量成员,在当前迭代器的擦除应该不引起撕裂()成员将被无效.
此代码将在G ++下运行,但会在Windows上提供运行时异常(VS2010):
#include <vector>
using namespace std;
int main()
{
vector<int> x;
x.push_back(1);
x.push_back(2);
x.push_back(3);
//Print
for(vector<int>::const_iterator i = x.begin(); i != x.end(); ++i)
printf("%d\n", *i);
//Delete second node
for(vector<int>::reverse_iterator r = x.rbegin(); r != x.rend(); ++r)
if(*r == 2)
x.erase((r+1).base());
//Print
for(vector<int>::const_iterator i = x.begin(); i != x.end(); ++i)
printf("%d\n", *i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误很有趣:
表达式:向量迭代器不可递减
在第二次运行时给出第二个for循环的行.递减引用reverse_iterator的内部"当前"迭代器成员,每当reverse_iterator递增时递减.
有人能解释一下这种行为吗?
谢谢.
编辑
我认为这个代码示例更好地表明它不是r的问题,而是rend():
//Delete second node
for(vector<int>::reverse_iterator r = x.rbegin(); r != x.rend();)
{
vector<int>::reverse_iterator …Run Code Online (Sandbox Code Playgroud) 我想从我的C#项目中的另一个应用程序的标准输出流中解析UTF8字符.使用默认方法,从进程的标准输出流中读取时,ANSI范围之外的字符会被破坏.
现在根据微软的说法,我需要做的是设置StandardOutputEncoding:
如果StandardOutputEncoding属性的值为Nothing,则进程将使用标准输出的默认标准输出编码.必须在启动进程之前设置StandardOutputEncoding属性.设置此属性不保证进程将使用指定的编码.应测试应用程序以确定进程支持的编码.
但是,尝试将StandardOutputEncoding设置为UTF8/CP65001时输出为read,当转储到二进制文件时,显示相同的外语字符阉割.它们总是被读作'?' (又名0x3F)而不是他们应该是什么.
我知道此时的假设是我正在解析的输出的应用程序根本就不发送UTF8输出,但是当我尝试将应用程序的输出从命令行转储到文件后绝对不是这种情况.强制命令提示的代码页为65001,一切看起来都很好.
chcp 65001 && slave.exe > file.txt
Run Code Online (Sandbox Code Playgroud)
通过这个,我知道应用程序slave.txt能够吐出UTF8编码的标准输出,但是尽可能地尝试,我无法让StandardOutputEncoding在我的C#应用程序中做同样的事情.
每当我最终处理.NET中的编码时,我希望我回到C++世界,所有需要更多工作的东西,但是更加透明.我正在考虑编写一个C应用程序来将slave.txt的输出读入一个准备好进行C#解析的UTF8编码的文本文件,但我现在暂时不采取这种方法.
我标杆/优化一个缓慢的C++应用程序,并采取了一些stackshots我发现我的应用程序的发布版本使用调试堆,一些发现将指示堆栈跟踪:
ntdll.dll!string "Enabling heap debug options\n"() + 0x11056 bytes
Run Code Online (Sandbox Code Playgroud)
这是在Windows 7上运行的64位应用程序.我在网上完全相同的环境中看到有关此问题的两三个其他投诉,但没有任何回复.
有没有人知道为什么Windows或Visual Studio会将调试堆用于发布版本C++项目?
在格式字符串的全文是静态的并且在编译时已知的情况下,丢失的格式字符串参数不应该是编译时错误,或者至少是警告吗?
ReSharper 捕捉到了这一点,但它只是一个带下划线的波浪线。我的印象是这会触发一般的编译时错误:
string x = string.Format("soeuotnh {0}");
Run Code Online (Sandbox Code Playgroud)
有什么方法可以触发此类错误的警告,而不必通过 FxCop 或其他方式运行我的代码?即使是 C/C++ 编译器也会为如此明显的错误触发警告/错误(尽管它们通常不会检查类型安全)。
我正在为iOS设备开发Youtube的客户端.我想检查记录的用户是否喜欢或不喜欢指定的视频.但我找不到任何支持API(这里)
当我加载视频源时,我刚刚在下面找到了评级信息,没有任何东西显示已登录的用户喜欢或不喜欢这个视频.
{
"gd$rating":{
"average":4.8963733,
"max":5,
"min":1,
"numRaters":193,
"rel":"http://schemas.google.com/g/2005#overall"
},
"yt$statistics":{
"favoriteCount":"0",
"viewCount":"111626"
},
"yt$rating":{
"numDislikes":"5",
"numLikes":"188"
}
}
Run Code Online (Sandbox Code Playgroud)
我犯了什么错吗?
我正在尝试更新一些"遗留"代码,以符合MSVC的最新安全更新,并且我正面临着迁移_vsnprintf到的一些问题_vsnprintf_s.
特别是,我_vsnprintf使用空缓冲区调用,为计数/长度调用零,获取结果,分配所需大小的缓冲区(return value + 1),然后_vsnprintf使用新分配的缓冲区和已知正确的大小再次调用:
size_t length = _vsntprintf(nullptr, 0, mask, params);
TCHAR *final = new TCHAR [length + 1];
_vsntprintf(final, length + 1, mask, params);
Run Code Online (Sandbox Code Playgroud)
如果count指定的缓冲区大小不足以包含format和argptr指定的输出,则vsnprintf的返回值是count(如果count足够大)将写入的字符数.如果返回值大于count-1,则输出已被截断.
我正在尝试做同样的事情_vsnprintf_s,但它的文档不包含相同的内容.相反,它说
如果存储数据和终止空值所需的存储超过sizeOfBuffer,则调用无效参数处理程序,如参数验证中所述,除非count为_TRUNCATE,在这种情况下,将写入适合缓冲区的字符串,并且 - 1回来了.
无论如何都要尝试以下内容:
size_t length = _vsntprintf_s(nullptr, 0, 0, mask, params);
Run Code Online (Sandbox Code Playgroud)
这导致"长度"为零.如果您传入_TRUNCATE(-1)作为计数,则以下断言失败:
表达式:buffer!= nullptr && buffer_count> 0
我认为可以覆盖_set_invalid_parameter_handler并以某种方式找出长度应该是多少,但是必须有一种更简单的方法吗?
Windows 10 下的 UWP 应用程序必须先部署,然后才能运行/调试。
Visual Studio 2017 提供了一个选项来禁用在构建时部署项目:
这允许人们构建解决方案并检查编译错误(例如ctrl+shift+b),而无需等待几秒钟(即使在具有 64GB RAM 和 MLC 或 3D XPoint SSD 的机器上)以完成部署。
然而,这里的问题是尝试调试应用程序(例如 F5)将运行项目的最后部署版本,这是不可取的。
是否有一种简单的方法来设置项目的调试目标,以便它在第一次调试时部署(目前是这种情况),没有更改构建的后续调试不会触发不必要的部署(这是默认的,out-开箱即用的行为),但构建不会直接触发部署?
deployment windows-10 uwp windows-10-universal visual-studio-2017
我正在尝试将可折叠面板添加到我在Interface Builder中添加的面板,类似于Office 2008和XCode本身中的面板.
对于那些不了解它的人来说,这是可折叠的面板:
知道如何将其添加到我的项目中吗?谷歌没有太多帮助.
c++ ×3
.net ×2
c# ×2
performance ×2
cocoa ×1
controls ×1
deployment ×1
disclosure ×1
encoding ×1
erase ×1
heap ×1
indexing ×1
primary-key ×1
printf ×1
process ×1
progress ×1
sqlite ×1
utf-8 ×1
uwp ×1
vector ×1
visual-c++ ×1
webclient ×1
windows-10 ×1
youtube-api ×1